2009-10-20 69 views
27

我正在尋找的LINQ到SQL相當於此查詢:Linq to SQL:如何在沒有組的情況下進行聚合?

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

這是沒有一組由的總和。我似乎無法找到任何方法來做到這一點,但沒有發出四個單獨的查詢(一個Count和三個Sum)。有任何想法嗎?

+1

http://social.msdn.microsoft.com/forums/en-US/linqproject一般/線程/ 3ef94aba-cb2d-45b4-8a6e-f3fc48cd8817/ – 2009-10-20 21:06:14

回答

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 2009-10-20 21:19:49

+0

完全同意 – CSharpAtl 2009-10-20 21:47:35

12

你可以使用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) 
         }); 
相關問題