Измените свойство bool элементов в коллекции, если они совпадают / не совпадают с индексом, содержащимся в другом списке, используя LINQ

#c# #linq #list

#c# #linq #Список

Вопрос:

У меня есть IEnumerable Collection of Model , который содержит около 70 элементов.

 Model myModel = new Model()
{
    Index = 1,
    IsSelected = false
}
  

У меня есть другой, List<int> Indexes который может содержать целые числа, соответствующие любому из Model индексов s в первом Collection . List<int> Indexes также может быть пустым, но не NULL .

 List<int> Indexes = new List<int>() { 3, 21, 33, ...}; 
  

Мне удалось изменить IsSelected свойство на true для любого соответствующего индекса, используя

 collection.Where(col => Indexes.Any(index => col.Index == index))
.ToList()
.ForEach(a => { a.IsSelected = true; });
  

Но как мне установить IsSelected значение false для элементов с индексом, которого нет в List<int> Indexes использовании LINQ?

Если возможно, я хотел бы объединить операторы LINQ set to true и set to false в одной строке.

Ответ №1:

 collection.Where(m => !Indexes.Contains(m.Index)).ForEach(m => { m.IsSelected = false; });
  

Если вы хотите установить их в одном операторе.

 collection.ForEach(m => { m.IsSelected = Indexes.Contains(m.Index); });
  

Комментарии:

1. Спасибо. Если это возможно, я хотел бы объединить эти операторы с true и false . Смотрите мой обновленный вопрос.

2. Ваш код не будет работать. ForEach недоступен для IEnumerables.

3. конечно, добавьте ToList после where или я предполагал, что коллекция — это список

Ответ №2:

Попробуйте это

 collection.ToList().ForEach(col => { 
      col.IsSelected = Indexes.Contains(col.Index); 
});