假设我有一个类似于这个简单示例的实体:
MyEntity { int property1; int property2; int property3; }
现在假设我有这些实体的 IEnumerable列表。是否有一个 LINQ 查询,我可以执行,将 property1的值设置为100的每个实体在列表中?我知道我可以通过 foreach 做到这一点,但是我想知道 LINQ 是否可以做得更优雅一些。
IEnumerable
property1
如果你有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();
除了 Darrelk和 Mkedobbs,NET 代码:
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()