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