我们都知道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

解决方案 »

  1.   


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

  2.   

    这个形式虽然可以得到结果,但它生成的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.5420SELECT NULL AS [EMPTY]
    FROM [dbo].[Employees] AS [t0]
    -- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.30729.5420也就是说,聚合函数是立即执行的,它不会等到访问迭代器的时候才由Linq To Sql引擎解析,所以问题还是没有得到解决。继续等待解决方案!