我有一个使用Lambda表达式通过Aggregate方法求和的整数列表:
var mylist = new int[] { 3, 4, 5 };
var result = mylist.Aggregate((a, b) => a + b);
据我了解,Lambda表达式总是可以转换为LINQ查询。这样的LINQ查询将如何查找我的示例?
编辑:我明白。在我的例子中添加数字可能更好。但我真的想知道这个Aggregate将如何使用LINQ查询。
答案 0 :(得分:1)
它已经是一个LINQ查询,Aggregate是一个LINQ运算符,我假设你的意思是它在LINQ理解语法中会是什么样子?理解语法只有一些内置功能(select,where,multiple choices,groupby等),它没有内置所有运算符,所以当你需要其中一个(比如聚合)时,你将它包装在parenthèses周围并保持使用常规语法。由于除了聚合之外什么都没有,所以我不可能给出一个例子,所以我将从另一个查询出发:
var mylist = new int[] { 3, 4, 5, 6, 7, 8 };
var result = mylist
.Where(item=>item %2 == 0)
.Aggregate((a, b) => a + b);
var ComprehensiveResult =
(from item in mylist
where item % 2 == 0
select item)
.Aggregate((a, b) => a + b);
综合语法更像是“来自SQL引入的人的LINQ”,你无法用它来做普通使用运算符的事情,但反过来却不是这样,因为并非所有运算符都已构建在替补。唯一可以想到的是综合语法更好(除了个人品味)是多次选择生成笛卡尔积,这在普通方法语法中难以维护。
答案 1 :(得分:0)
在这种情况下,聚合函数会相互添加数字。因此,等效函数是SUM
:
var qry = mylist.Sum(x=>x);
或
var qry = (from n in mylist select n).Sum();
<强> [编辑] 强>
OP已在问题中添加了额外信息,但没有通知我。
是的,可以将Aggregate
函数“转换”为linq查询,但需要扩展方法。请参阅此文章:Cumulating values with LINQ