使用LINQ更新实体列表中的属性

时间:2009-11-21 19:00:02

标签: linq

假设我有一个看起来像这个简单例子的实体:

MyEntity 
{
   int property1;
   int property2;
   int property3;
}

现在假设我有IEnumerable这些参与者的列表。是否有我可以执行的LINQ查询,它会为列表中的每个实体将property1的值设置为100?我知道我可以通过foreach做到这一点,但想知道LINQ是否可以更优雅地做到这一点。

5 个答案:

答案 0 :(得分:84)

像这样:

var result = GetMyIEnumerable()
                .ToList();
result.ForEach(x => x.property1 = 100);

答案 1 :(得分:10)

至于Darin的观点,LINQ是为查询而构建的。在使用LINQ时,我已经深入思考了被查询的对象应该被视为不可变的。但是,选择运算符也非常适合转换。

因此,您可以通过将一个集转换为另一个集来解决您的问题,如下所示:

var result = myEntityCollection.Select(e => {
   var ret = e;
   e.property1 = 100;
   return e; });

原始集合中的项目不受影响,但结果中的项目现在都将property1设置为100。

答案 2 :(得分:5)

我发现这两个解决方案对我有用。

result = result.Where(x => (x.property1 = 100) == 100).ToList();

result = result.Select(c => { c.property1 = 100; return c; }).ToList();

答案 3 :(得分:4)

如果您有100个属性,那么反射可能是最优雅的。 LINQ用于查询不更新。

答案 4 :(得分:0)

除了 Darrelk mkedobbs VB.NET代码

success