2013-06-25 7 views
12

से योग करने के लिए मैं इस तरह के डेटा तालिका है:LINQ क्वेरी समूह

Category   Description  CurrentHours  CTDHours 
LC1    Cat One     5    0 
LC2    Cat Two     6    0 
LC3    Cat Three    18    0 
LC1    Cat One     0    9 
LC2    Cat Two     0    15 
LC4    Cat Four    0    21 

मैं यह करने के लिए समूह और योग करने की जरूरत है कि:

Category   Description  CurrentHours  CTDHours 
LC1    Cat One     5    14 
LC2    Cat Two     6    21 
LC3    Cat Three    18    0 
LC4    Cat Four    0    21 

दूसरे शब्दों में मैं दो योग करने के लिए की जरूरत है श्रेणी और विवरण कॉलम द्वारा समूहीकृत कॉलम घंटे।

मुझे पता है कि मैं मौजूदा डेटा के माध्यम से एक नई टेबल और लूप बना सकता हूं और डेटा को नई तालिका में जोड़ सकता हूं लेकिन मैंने सोचा कि लिंक का उपयोग करके इसे करने का एक आसान तरीका होगा। मैंने इसे कुछ घंटों तक गुमराह कर दिया है लेकिन मुझे मिले सभी उदाहरणों में फिट नहीं लग रहा था जो मैं करने की कोशिश कर रहा था।

बीटीडब्ल्यू, ओडीबीसी चालक जो डेटा तालिका बनाता है, में उप प्रश्नों की क्षमता नहीं है, या मैं इसे एसक्यूएल का उपयोग करके किया होगा।

धन्यवाद,

जॉन

उत्तर

30

उपयोग गुमनाम समूह के लिए श्रेणी और विवरण द्वारा वस्तु।

from r in table.AsEnumerable() 
group r by new { 
    Category = r.Field<string>("Category"), 
    Description = r.Field<string>("Description") 
} into g 
select new { 
    Category = g.Key.Category, 
    Description = g.Key.Description, 
    CurrentHours = g.Sum(x => x.Field<int>("CurrentHours"), 
    CTDHours = g.Sum(x => x.Field<int>("CurrentHours") + x.Field<int>("CTDHours")) 
} 

आप (प्रश्न से स्पष्ट नहीं) डेटाबेस में जानना चाहते हैं, तो:: यहाँ डेटासेट क्वेरी के Linq जो समूहीकृत घंटे देता है

from r in context.Table 
group r by new { 
    r.Category, 
    r.Description 
} into g 
select new { 
    g.Key.Category, 
    g.Key.Description, 
    CurrentHours = g.Sum(x => x.CurrentHours), 
    CTDHours = g.Sum(x => x.CTDHours + x.CurrentHours) 
} 
+0

यह काम किया। बहुत बहुत धन्यवाद। बीटीडब्ल्यू, आपने मेरे कॉलम को इतनी पूरी तरह से लाइन करने के लिए कैसे प्राप्त किया? मैंने इसे समझने और असफल होने की कोशिश की। – John

+2

@ जॉन मैंने टेबल का चयन किया और कोड के रूप में स्वरूपित किया (यह सफेद जगहों को संरक्षित करता है) :) –

+2

@ सेर्गी बेरेज़ोवस्कीय दोनों संस्करणों को देने के लिए धन्यवाद, ** वास्तव में अद्भुत ** :) –

0

आप CurrentHours और CTDhours योग करने के लिए की जरूरत है, तो -

select new { 
    ... 
    CTDHours = g.Sum(x => x.Field<int>("CTDHours") + g.Sum(x => x.Field<int>("CurrentHours") 
}