如何修改IEnumerable集合中的项目并保留其顺序

时间:2010-02-11 23:33:24

标签: c# linq

我有以下情况。我有一个具有“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.

2 个答案:

答案 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)