2009-10-20 17 views
27

私はこのクエリにLINQのツーSQL同等を探しています:Linq to SQL:グループなしで集計する方法は?

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

これはによってグループなし集合体です。私は4つの別々のクエリ(1つのカウントと3つの合計)を発行するのに足りない、これを行う方法を見つけることができません。何か案は?

+1

http://social.msdn.microsoft.com/forums/en-US/linqproject一般/スレッド/ 3ef94aba-cb2d-45b4-8a6e-f3fc48cd8817/ –

答えて

30

これは私が見つけたものであるあなたはまだで...ちょうど定数使用できるグループをしなければならないように思える:

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] 
次のように、ラムダ式を使用して、同じクエリを実行することができ
+0

これは色んなですが、それは完全に機能します。ありがとうございました。 – Portman

+0

完全一致 – CSharpAtl

12

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) 
         }); 
関連する問題