假设我有一个看起来像这个简单示例的实体:
MyEntity
{
int property1;
int property2;
int property3;
}
Run Code Online (Sandbox Code Playgroud)
现在假设我IEnumerable列出了这些参与者.是否有可以执行的LINQ查询,它会property1为列表中的每个实体设置值为100?我知道我可以通过foreach做到这一点,但是想知道LINQ是否可以更优雅地做到这一点.
Bru*_*eis 103
像这样:
var result = GetMyIEnumerable()
.ToList();
result.ForEach(x => x.property1 = 100);
Run Code Online (Sandbox Code Playgroud)
mke*_*bbs 15
至于Darin的观点,LINQ是为查询而构建的.在使用LINQ时,我已经深入思考了被查询的对象应该被视为不可变的.但是,Select运算符也非常适合转换.
因此,您可以通过将一个集转换为另一个集来解决您的问题,如下所示:
var result = myEntityCollection.Select(e => {
var ret = e;
e.property1 = 100;
return e; });
Run Code Online (Sandbox Code Playgroud)
原始集合中的项目不受影响,但结果中的项目现在都将property1设置为100.
这是我发现对我有用的两个解决方案。
result = result.Where(x => (x.property1 = 100) == 100).ToList();
Run Code Online (Sandbox Code Playgroud)
要么
result = result.Select(c => { c.property1 = 100; return c; }).ToList();
Run Code Online (Sandbox Code Playgroud)