Подтвердить что ты не робот

Linq to SQL: как агрегировать без группы?

Я ищу эквивалент Linq-to-SQL для этого запроса:

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

Это агрегат без группы. Кажется, я не могу найти способ сделать это, не выпуская четыре отдельных запроса (один граф и три суммы). Любые идеи?

4b9b3361

Ответ 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) 
                      });