如何在Linq中没有“group by”的情况下执行聚合?

时间:2008-11-18 15:44:33

标签: .net linq c#-3.0

我在linq中可以找到的所有聚合都有一个“group by”子句。我如何在LINQ中编写此查询?我有一个日期 - 值对列表,我想取平均值:

SELECT AVG(MySuff.Value) AS AvgValue FROM MyStuff

6 个答案:

答案 0 :(得分:4)

早上艾伦:

int count = (from a in myContext.MyStuff
            select a).Count();

假设myContext是DataContext。

请注意,这可以让您立即执行,这可能是您不想要的。

您可以将查询结果存储在var:

var allResults = from a in myContext.MyStuff
                 select a;

//sometime later when needed
int count = allResults.Count(); // executes the SQL query now!

答案 1 :(得分:2)

LINQ中有很多非分组聚合运算符。 Alan的回答显示Count运算符,但MSDN lists others

编辑:看过你的编辑后,看起来你想要Average运算符。

答案 2 :(得分:1)

应该注意的是,Alan的LINQ代码将准确地产生AlanR的SQL代码,尽管你可能会猜测它。

但是,应该在这里谨慎行事。如果它写成:

var q = from a in MyStuff select a;
int count = q.count();
foreach(MyStuff m in q) {...}

然后,这将生成两个数据库查询:第一个作为“select count(*)...”,第二个作为“select * ....”

答案 3 :(得分:1)

修改后的例子(我相信)的答案是:

var average = (from a in MyStuff
              select a.Value).Average();

答案 4 :(得分:1)

有点分拣机

pairs.Average(a=>a.Value)   

如果没有联接,分组或让,查询表达式(来自...)在我看来不值得。

答案 5 :(得分:0)

谢谢大家的帮助。这就是我所确定的,有效。

(from s in series select s).Average( a => a.Value )

此致 艾伦... - [R