2009-10-20 10 views
27

szukam odpowiednik LINQ-SQL do tego zapytania:Linq do SQL: jak agregować bez grupy przez?

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

To agregat bez grupy przez. Nie mogę znaleźć sposobu, aby to zrobić, poza wydaniem czterech osobnych zapytań (jedna liczba i trzy Suma). Jakieś pomysły?

+1

http://social.msdn.microsoft.com/forums/en-US/linqproject general/thread/3ef94aba-cb2d-45b4-8a6e-f3fc48cd8817/ –

Odpowiedz

30

To co znalazłem Wygląda na to trzeba jeszcze zrobić przez grupę ... może po prostu użyć stałej:

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) 
    }; 

To daje następujące SQL, która nie jest optymalna, ale działa:

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] 
+0

To kulawa, ale działa zupełnie. Dziękuję Ci. – Portman

+0

całkowicie się zgadzam – CSharpAtl

12

można zrobić to samo zapytanie za pomocą wyrażenia lambda w następujący sposób:

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) 
         }); 
Powiązane problemy