2010-03-22 13 views
5

का उपयोग कर मैं एक साधारण SQL क्वेरी है मैं डेटाबेस में डेटा को एन्क्रिप्ट करने के लिए हैगिनती रिकॉर्ड LINQ

'1' '4' 'Approved' '40' 
'2' '1' 'Rejected' '19' 
'3' '2' 'Not Decided' '12' 

, और इस तरह के रूप में हूँ संबंधपरक रूप में डेटा को योग करने में असमर्थ। इसके आस-पास पहुंचने के लिए मैंने एप्लिकेशन परत में डेटा डिक्रिप्ट किया है, और वहां पूछने के लिए LINQ का उपयोग करना चाहते हैं। मैं निम्नलिखित परिणाम की जरूरत है:

'1' 'Approved'  '10' 
'3' 'Not Deceided' '6' 
'2' 'Rejected'  '19' 
'1' 'Approved'  '15' 
'1' 'Approved'  '5' 
'3' 'Not Deceided' '6' 
'1' 'Approved'  '10' 

मैं कक्षा में इन परिणामों रख दिया और एक जोरदार टाइप किया सूची बनाएं:

public class results 
{ 
public int ID {get;set;} 
public string OptionName {get;set;} 
public int Unit {get;set;} 
} 

मैं लगभग के बारे में SQL क्वेरी जैसे परिणाम वापस लाने के लिए LINQ प्रश्न हैं:

var q = from r in Results 
     group p.Unit by p.ID 
     int g 
     select new {ID = g.Key, 
        Selections = g.Count(), 
        Units = g.Sum()}; 

मैं कैसे सुनिश्चित करूं कि मेरी LINQ क्वेरी मुझे Option Name भी दे?

अगर मैं एक वर्ग Statistics कहा जाता है मेरे परिणाम धारण करने के लिए मैं LINQ क्वेरी कैसे संशोधित करेगा मुझे List<Statistics> परिणाम सेट देने के लिए बनाया?

public class results 
    { 
    public int ID {get;set;} 
    public int NumberOfSelections { get; set; } 
    public string OptionName {get;set;} 
    public int UnitTotal {get;set;} 
    } 

उत्तर

4

आप वर्तमान में सिर्फ समूहीकरण रहे आईडी द्वारा इसके बजाय, मूल क्वेरी के अनुसार, आपको विकल्प नाम से भी समूह करना होगा। इस तरह प्रत्येक समूह की कुंजी में आईडी और विकल्प नाम दोनों होंगे। यहाँ सिर्फ इतना है कि परिवर्तन है:

var q = from r in Results 
     group r.Unit by new { p.ID, p.OptionName } into g 
     select new { ID = g.Key.ID, 
        OptionName = g.Key.OptionName 
        Selections = g.Count(), 
        UnitTotal = g.Sum() }; 

अब, यह तुरंत मेरे लिए स्पष्ट नहीं था कि आप का चयन किया गया था समूह आइटम के लिए सिर्फ "इकाई" भाग। मुझे क्वेरी अभिव्यक्ति में "समूह पी। अनिट" याद आया। मेरा बुरा ... लेकिन अन्य भी इसी तरह से कर सकते हैं। यहाँ एक विकल्प है, जो बनाता है समूह मदों को शामिल करना है, और उसके बाद प्रक्षेपण में इकाइयों का योग:

var q = from r in Results 
     group r by new { p.ID, p.OptionName } into g 
     select new { ID = g.Key.ID, 
        OptionName = g.Key.OptionName 
        Selections = g.Count(), 
        UnitTotal = g.Sum(x => x.Unit) }; 
+0

मुझे खुशी है कि मुझे जवाब देने में बहुत लंबा लगा। मैं "परिणाम परिणाम द्वारा आईडी परिणाम" जैसे कुछ सुझाव देने जा रहा था और फिर "OptionName = g.Select (परिणाम => परिणाम। ऑप्शननाम)। सबसे पहले()"। जो शायद बहुत अधिक होगा। –

1

इस क्वेरी समूहों आईडी और विकल्प नाम से इस प्रकार यह उपलब्ध बनाने:

var q = from r in Results 
     group p.Unit by new { ID = p.ID, OptionName = p.OptionName } into g 
     select new { 
      ID = g.Key.ID, 
      OptionName = g.Key.OptionName, 
      Selections = g.Count(), 
      Units = g.Sum() 
     }; 

अपने कस्टम परिणाम वर्ग उपयोग लौटने के लिए:

var q = from r in Results 
     group p.Unit by new { ID = p.ID, OptionName = p.OptionName } into g 
     select new results() { 
      ID = g.Key.ID, 
      OptionName = g.Key.OptionName, 
      NumberOfSelections = g.Count(), 
      UnitTotal = g.Sum() 
     }; 
+1

आप अगर अभिव्यक्ति पुनः प्राप्त करने के मूल्य का इस्तेमाल किया एक गुमनाम प्रकार में संपत्तियों के लिए नामों का उल्लेख करने की जरूरत नहीं पहले से ही उपयुक्त - उदाहरण के लिए मेरा जवाब देखें। –

संबंधित मुद्दे