我们都知道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
decimal salary = dc.Employees.Sum(o => o.Salary);
它可以生成这样的SQL语句:
SELECT SUM(Salary) FROM Employees
如果再要统计一个字段只能再写一次,如果有10个字段呢?这样貌似效率不高,是否有办法同时统计几个字段,例如生成下面的SQL语句:
SELECT SUM(Salary), AVERAGE(Age) FROM Employees
var c=from li in list
select new{i=list.Sum(o=>o.Salary),i1=list.Sum(o=>o.Salary)}就这个形式
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.5420SELECT NULL AS [EMPTY]
FROM [dbo].[Employees] AS [t0]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.30729.5420也就是说,聚合函数是立即执行的,它不会等到访问迭代器的时候才由Linq To Sql引擎解析,所以问题还是没有得到解决。继续等待解决方案!