【问题标题】:Linq to SQL: how to aggregate without a group by?Linq to SQL:如何在没有分组的情况下进行聚合?
【发布时间】:2009-10-20 20:42:12
【问题描述】:

我正在搜索与此查询等效的 Linq-to-SQL:

SELECT
  [cnt]=COUNT(*),
  [colB]=SUM(colB),
  [colC]=SUM(colC),
  [colD]=SUM(colD)
FROM myTable

这是没有分组的聚合。除了发出四个单独的查询(一个计数和三个总和)之外,我似乎找不到任何方法来做到这一点。有什么想法吗?

【问题讨论】:

    标签: linq-to-sql


    【解决方案1】:

    这就是我发现的似乎你仍然需要通过...进行分组...可以使用常量:

    var orderTotals =
        from ord in dc.Orders
        group ord by 1 into og
        select new
        {
            prop1 = og.Sum(item=> item.Col1),
            prop2 = og.Sum(item => item.Col2),
            prop3 = og.Count(item => item.Col3)
        };
    

    这会生成以下 SQL,虽然不是最佳的,但可以:

    SELECT SUM([Col1]) as [prop1], SUM([Col2]) as [prop2], COUNT(*) AS [prop3]
    FROM (
        SELECT 1 AS [value], [t0].[Col1], [t0].[Col2], [t0].[Col3]
        FROM [table] AS [t0]
        ) AS [t1]
    GROUP BY [t1].[value]
    

    【讨论】:

      【解决方案2】:

      您可以使用 Lambda 表达式执行相同的查询,如下所示:

        var orderTotals = db.Orders
                            .GroupBy( i => 1)
                            .Select( g => new
                            {
                                 cnt = g.Count(), 
                                 ScolB = g.Sum(item => item.ColB), 
                                 ScolC = g.Sum(item => item.ColC) 
                            });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-27
        • 2013-08-24
        • 1970-01-01
        • 2020-10-25
        • 2013-10-16
        • 1970-01-01
        相关资源
        最近更新 更多