【发布时间】:2012-10-10 19:22:45
【问题描述】:
我有一些列表(其中 T 是自定义类,并且类具有一些属性)。 我想知道如何使用 Lambda 表达式更改其中的一个或多个值,因此结果将与下面的 foreach 循环相同:
注意:列表中包含多个项目(多行)
foreach (MyClass mc in list)
{
if (mc.Name == "height")
mc.Value = 30;
}
这是 linq 查询(使用 Lambda 表达式),但它与上面的 foreach 循环不同,它只返回列表中的 1 项(一行)!
我想要的是,它返回所有项目(所有行)并且只更改适当的项目(在 WHERE 扩展方法中指定的项目。
list = list.Where(w => w.Name == "height").Select(s => { s.Value = 30; return s; }).ToList();
注意:这两个例子不一样!我再说一遍,linq 只返回 1 个项目(一行),这是我不想要的,我也需要列表中的所有项目(比如 foreach 循环,它只做更改,但它不会删除任何项目)。
【问题讨论】:
-
为什么要使用 lambda 表达式?
foreach代码运行良好且简单。 LINQ 用于查询数据,而不是对其进行变异。 -
根据定义,这里只返回匹配的记录。基本上:这不是你想要的 - 只需使用 foreach
-
嗨,乔恩,我知道 foreach 循环如果击球手和更快,但我想学习,仅此而已。对于一些“小”代码就可以了。但重点主要在于学习。
-
谢谢 Marc,很好很简单的解释。
-
@BluE:虽然这不是一种功能性方法。以您想要的形式创建一个 new 对象是函数式方法。
标签: c# linq lambda expression