如何在LINQ TO SQL中一次使用多个聚合函数

effun 2011-12-28 05:01:13
我们都知道Linq To Sql中可以使用Sum、Average等聚合函数对数据库进行统计,但好象每次只能计算一个字段,例如:
decimal salary = dc.Employees.Sum(o => o.Salary);
它可以生成这样的SQL语句:
SELECT SUM(Salary) FROM Employees
如果再要统计一个字段只能再写一次,如果有10个字段呢?这样貌似效率不高,是否有办法同时统计几个字段,例如生成下面的SQL语句:
SELECT SUM(Salary), AVERAGE(Age) FROM Employees
...全文
382 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
effun 2011-12-29
  • 打赏
  • 举报
回复
这个形式虽然可以得到结果,但它生成的SQL语句并不是想向的那样。通过实测发现,事实上它生成了三条SQL语句:


SELECT SUM([t0].[Salary]) AS [value]
FROM [dbo].[Employees] AS [t0]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.30729.5420

.Net SqlClient Data Provider: 警告: 聚合或其他 SET 操作消除了空值。。
SELECT AVERAGE([t0].[Age]) AS [value]
FROM [dbo].[Employees] AS [t0]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.30729.5420

SELECT NULL AS [EMPTY]
FROM [dbo].[Employees] AS [t0]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.30729.5420

也就是说,聚合函数是立即执行的,它不会等到访问迭代器的时候才由Linq To Sql引擎解析,所以问题还是没有得到解决。

继续等待解决方案!
cfvgodot 2011-12-28
  • 打赏
  • 举报
回复

var c=from li in list
select new{i=list.Sum(o=>o.Salary),i1=list.Sum(o=>o.Salary)}



就这个形式

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧