с использованием лямбда-выражения.Не хочу использовать foreach.
Обычно это глупое требование и отличительная черта, с которой вы не очень знакомы в C #, Linq или анализе производительности.У вас есть коллекция, элементы которой вы хотите изменить, поэтому вы должны использовать foreach()
.
Если вы пробуете функциональное программирование, вам следует рассматривать элементы списка как неизменяемые и проектировать в новую коллекцию.
Первая часть вашей проблемы - поиск элементов списка дляизменить, основываясь на наличии одного из их свойств в свойствах элементов другой коллекции, тривиально :
var elementsToModify = list1.Where(l1 => list2.Any(l2 => l2.Id == l1.Id));
Теперь с foreach()
это будет просто:
foreach (var l1 in elementsToModify)
{
l1.Flag = true;
}
Или, даже более плотный (не то, что меньше кода означает больше производительности):
foreach (var l1 in list1.Where(l1 => list2.Any(l2 => l2.Id == l1.Id)))
{
l1.Flag = true;
}
Итак, ваш код.Но вы не хотели использовать foreach()
.Затем вам нужно спроецировать в новую коллекцию:
var newList1 = list1.Where(l1 => list2.Any(l2 => l2.Id == l1.Id))
.Select(l1 => new Class1
{
Id = l1.Id,
Flag = true,
})
.ToList();
Там у вас есть List<Class1>
только с помеченными элементами.При желании вы можете использовать этот список в foreach()
для обновления оригинала list1
.Ой, подожди.