2009-11-21 58 views
29

的名单说我有一个看起来像这样简单的例子,一个实体:使用LINQ to更新属性在实体

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

现在假设我有这方面的entites的IEnumerable名单。有没有可以执行的LINQ查询,将列表中的每个实体的值设置为property1?我知道我可以通过foreach来做到这一点,但是想知道LINQ是否可以更优雅地做到这一点。

回答

54

像这样:

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

绝对精彩!如此微妙而强大 – 2017-03-24 14:44:21

4

如果您有100个属性,反射将是最优雅的。 LINQ的查询不更新。

4

要Darin的点,LINQ是专为查询。在使用LINQ时,我已经进入了心态,被查询的对象应该被视为不可变的。但是,选择运营商也非常适合转型。

所以,你可以从一组转换到另一个如下解决您的问题:

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

原来集合中的项目是不变的,但在结果中的项目现在都property1设置为100

1

下面是我发现的两种解决方案。

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

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