2015-03-23 3 views
0

Я сохраняю список элементов, выбранных в моей модели. При добавлении правильных элементов выбора я получаю их из списка, хранящегося в электронной таблице, некоторые из которых являются дубликатами. Я хочу удалить эти дубликаты и сделать следующий код.Не удается проверить, содержит ли список элемент select в C#

 //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); 
       } 
      } 
     } 

Однако это не работает, поскольку оно просто добавляет все, чтобы было много дубликатов. Я не знаю, работает ли что-то другое, потому что я имею дело не только с регулярными строками или чем-то подобным.

+1

Вы должны переопределить Object.equals и методы объекта Hashcode, чтобы сделать эту работу. –

+0

Спасибо. Я не был уверен, как это сделать, поэтому я создал еще один список строк, который сохранил значение selectlist и использовал его для сравнения, и это работает. Наверное, это не самый эффективный подход. – user3407039

+0

http://stackoverflow.com/questions/29146355/get-distinct-parent-items-using-lambda#comment46515416_29146355 релевантно – Ahmad

ответ

1

В этом случае, как вы используете ту же строку для Text и 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})); 
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 })); 

 Смежные вопросы

  • Нет связанных вопросов^_^