【发布时间】:2008-11-18 15:44:32
【问题描述】:
我在 linq 中可以找到的所有聚合都有一个“分组依据”子句。我将如何在 LINQ 中编写此查询?我有一个日期值对列表,我想取这些值的平均值:
SELECT AVG(MySuff.Value) AS AvgValue FROM MyStuff
【问题讨论】:
我在 linq 中可以找到的所有聚合都有一个“分组依据”子句。我将如何在 LINQ 中编写此查询?我有一个日期值对列表,我想取这些值的平均值:
SELECT AVG(MySuff.Value) AS AvgValue FROM MyStuff
【问题讨论】:
早上艾伦:
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!
【讨论】:
LINQ 中有很多非分组聚合运算符。 Alan 的回答显示了 Count 运算符,但 MSDN lists others。
编辑:看到您的编辑后,您似乎需要Average 运算符。
【讨论】:
修改后示例的答案(我相信)是:
var average = (from a in MyStuff
select a.Value).Average();
【讨论】:
应该注意的是,Alan 的 LINQ 代码将产生 AlanR 的 SQL 代码,尽管您可能会猜到其他情况。
但是,这里应该小心。如果写成:
var q = from a in MyStuff select a;
int count = q.count();
foreach(MyStuff m in q) {...}
然后这将生成两个数据库查询:第一个为“select count(*)...”,第二个为“select * ....”
【讨论】:
位排序器
pairs.Average(a=>a.Value)
如果没有 join、group 或 let,我认为 Query Expressions (from ...) 不值得。
【讨论】:
感谢大家的帮助。这是我决定的,它有效。
(from s in series select s).Average( a => a.Value )
问候, 艾伦...R
【讨论】:
series.Average(a => a.Value)。