我有以下情况。我有一个具有“Id”的项目列表。我必须搜索具有特定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.
答案 0 :(得分:2)
对Where的调用不会以任何方式修改collection
中存储的原始LINQ查询。相反,它会创建一个新的IEnumerable<T>
,其中是原始查询的子集。子集将具有与collection
这可能导致问题的唯一方法是,如果值collection
是一个LINQ,其中有一个Where子句,或者根据Property
的值进行过滤。如果是这种情况,并且您希望通过.ToList将订单强制集合保存到非惰性评估结构中。
collection = collection.ToList();
答案 1 :(得分:1)
只要集合中的对象是可变的,您的代码就可以正常工作。
顺便说一句,FirstOrDefault
采用可选的过滤器参数,因此您可以编写collection.FirstOrDefault(i => i.Id == someId)
。