的名单说我有一个看起来像这样简单的例子,一个实体:使用LINQ to更新属性在实体
MyEntity
{
int property1;
int property2;
int property3;
}
现在假设我有这方面的entites的IEnumerable
名单。有没有可以执行的LINQ查询,将列表中的每个实体的值设置为property1
?我知道我可以通过foreach来做到这一点,但是想知道LINQ是否可以更优雅地做到这一点。
的名单说我有一个看起来像这样简单的例子,一个实体:使用LINQ to更新属性在实体
MyEntity
{
int property1;
int property2;
int property3;
}
现在假设我有这方面的entites的IEnumerable
名单。有没有可以执行的LINQ查询,将列表中的每个实体的值设置为property1
?我知道我可以通过foreach来做到这一点,但是想知道LINQ是否可以更优雅地做到这一点。
像这样:
var result = GetMyIEnumerable()
.ToList();
result.ForEach(x => x.property1 = 100);
如果您有100个属性,反射将是最优雅的。 LINQ的查询不更新。
要Darin的点,LINQ是专为查询。在使用LINQ时,我已经进入了心态,被查询的对象应该被视为不可变的。但是,选择运营商也非常适合转型。
所以,你可以从一组转换到另一个如下解决您的问题:
var result = myEntityCollection.Select(e => {
var ret = e;
e.property1 = 100;
return e; });
原来集合中的项目是不变的,但在结果中的项目现在都property1设置为100
下面是我发现的两种解决方案。
result = result.Where(x => (x.property1 = 100) == 100).ToList();
或
result = result.Select(c => { c.property1 = 100; return c; }).ToList();
绝对精彩!如此微妙而强大 – 2017-03-24 14:44:21