可以将此Aggregate Lambda表达式转换为LINQ查询吗?

时间:2015-04-11 22:01:57

标签: linq lambda linq-to-objects

我有一个使用Lambda表达式通过Aggregate方法求和的整数列表:

var mylist = new int[] { 3, 4, 5 };

var result = mylist.Aggregate((a, b) => a + b);

据我了解,Lambda表达式总是可以转换为LINQ查询。这样的LINQ查询将如何查找我的示例?

编辑:我明白。在我的例子中添加数字可能更好。但我真的想知道这个Aggregate将如何使用LINQ查询。

2 个答案:

答案 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