0

我在我的视图模型中存储了一个选定项目的列表。添加正确的选择项时,我从存储在电子表格中的列表中获取它们,其中一些是重复的。我想消除这些重复项并使用以下代码来执行此操作。

        //Fill with all the install locations
        foreach (App y in applications)
        {
            //Check if the app has a server listed
            if (y.Server != "")
            {
                SelectListItem ItemToAdd = new SelectListItem { Text = y.Server, Value = y.Server };
                //Check if the the item has already been added to the list
                if (!vm_modal.serverLocations.Contains(ItemToAdd))
                {
                    vm_modal.serverLocations.Add(ItemToAdd);
                }
            }
        }

但是,这不起作用,因为它只是添加所有内容,因此有很多重复项。我不知道 contains 的工作方式是否不同,因为我不只是处理常规字符串或类似的东西。

4

2 回答 2

1

Text在这种情况下,当您对and使用相同的字符串时Value,您可以遍历您的源,并List<string>在将所有选中的值添加到您的选择列表之前将非重复值添加到一个简单的。

List<string> result = new List<string>();

foreach (App y in applications)
{
    //Check if the app has a server listed and for duplicates
    if (y.Server != "" && !result.Contains(y.Server))
    {
            result.Add(y.Server);
    }
}

result.ForEach(x => vm_modal.serverLocations.Add(
                new SelectListItem(){Text = x, Value = x}));
于 2015-03-23T11:28:45.457 回答
0

对于ste-fu所呈现的内容的“单行”,您可以编写

vm_modal.serverLocations
    .AddRange(applications
               .Where(app => app.Server != "")
               .Select(app => app.Server)
               .Distinct()
               .Select(server => new SelectListItem{ Text = server, Value = server }));
于 2015-03-23T13:37:33.447 回答