У меня следующая ситуация. У меня есть список предметов, у которых есть "Id". Я должен искать элемент с определенным идентификатором, изменять его значения и поддерживать порядок коллекции. Каким будет лучший способ сделать это?
var collection = <some_linq_query>
collection.Where(i=>i.Id=someId).FirstOrDefault().Property = "bla";
// now collection should be the same but the item updated.
Вызов функции Where не изменяет исходный запрос LINQ, хранящийся в collection
каким-либо образом. Вместо этого он создает новый IEnumerable<T>
, где находится подмножество исходного запроса. Подмножество будет иметь тот же относительный порядок, что и исходное множество в collection
Единственный способ, с помощью которого может возникнуть проблема, - это значение collection
- это LINQ, где имеет предложение Where или иначе фильтруется, основываясь на значении Property
. Если это так, и вы хотите сохранить коллекцию сил порядка в нелазную оцениваемую структуру через .ToList.
collection = collection.ToList();
Пока объекты в коллекции изменяемы, ваш код должен работать нормально.
Кстати, FirstOrDefault
принимает необязательный параметр фильтра, поэтому вы можете написать collection.FirstOrDefault(i => i.Id == someId)
.
struct
s?