假设我有一个看起来像这个简单例子的实体:
MyEntity
{
int property1;
int property2;
int property3;
}
现在假设我有IEnumerable
这些参与者的列表。是否有我可以执行的LINQ查询,它会为列表中的每个实体将property1
的值设置为100?我知道我可以通过foreach做到这一点,但想知道LINQ是否可以更优雅地做到这一点。
答案 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