2009-10-20 12 views
27

मैं इस प्रश्न के Linq करने वाली एसक्यूएल बराबर तलाश कर रहा हूँ:लिंक से एसक्यूएल: समूह के बिना समेकित कैसे करें?

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

यह द्वारा एक समूह के बिना एक समग्र है। मुझे ऐसा करने का कोई तरीका नहीं दिख रहा है, चार अलग-अलग प्रश्नों (एक गणना और तीन योग) जारी करने से कम। कोई विचार?

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

यह निम्नलिखित एसक्यूएल, जो इष्टतम नहीं है पैदा करता है, लेकिन काम करता है:

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) 
         }); 
संबंधित मुद्दे