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

假设我有一个类似于这个简单示例的实体:

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

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

119349 次浏览

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

像这样:

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

在 Darin 看来,LINQ 是为查询而构建的。在使用 LINQ 时,我已经进入了这样一种思维模式: 被查询的对象应该被视为不可变的。然而,选择操作符对于转换也非常有用。

因此,你可以通过以下方式从一组转换到另一组来解决你的问题:

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

原始集合中的项目没有被触及,但是结果中的项目现在都将 property 1设置为100。

下面是我找到的两个适合我的解决方案。

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

或者

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

除了 DarrelkMkedobbsNET 代码:

object.list =
object.list.Select(Function(x)
x.property = If(x.property.Length > 3, x.property.Substring(0, 3), x.property)
Return x
End Function).ToList()