2012-05-10 17 views
13

मेरे पास एक सारणी है जिसमें निम्नलिखित 3 कॉलम, आईडी, शॉर्टकोड, अपलोडडेट हैं।परिणाम के बाद ऑर्डर समूह द्वारा LINQ समूह

मैं शॉर्टकोड के परिणामों को समूहबद्ध करने के लिए LINQ का उपयोग करना चाहता हूं (और सभी परिणाम रखें) फिर उन समूहों को ऑर्डर करें और एक सूची वापस करें।

rawData.Provider.CreateQuery<PDFDocument>(qb.rootExperession) 
.ToList<PDFDocument>(). 
GroupBy(b=>b.ShortCode) 
.SelectMany(b=>b).ToList<PDFDocument>() 

मैं सभी परिणाम, शोर्ट आधार पर वर्गीकृत किया लौटना चाहते, UploadDate के अनुसार क्रमबद्ध प्रत्येक समूह के भीतर वस्तुओं और समूहों तो एक सबसे हाल ही में दस्तावेज़ है कि यह में क्रमबद्ध:

मैं निम्नलिखित है प्रथम।

क्या किसी को पता है कि यह भी संभव है?

उत्तर

31

प्रयास करें

rawData.Provider.CreateQuery<PDFDocument>(qb.rootExperession) 
    .AsEnumerable() 
    .OrderByDescending(d => d.UploadDate) 
    .GroupBy(d => d.ShortCode) 
    .SelectMany(g => g) 
    .ToList(); 

यह चाहिए

  • आदेश अपलोड दिनांक के आइटम (उतरते तो नवीनतम पहले)
  • फिर उन्हें कम से समूह: यह थोड़ा पेचीदा प्रश्न कोड - इसलिए प्रत्येक समूह के भीतर आइटम अभी भी क्रमबद्ध हैं
  • समूह अभी भी नीचे हैं आदेश न खत्म होने वाली है, तो ऑर्डर करने के लिए कोई जरूरत नहीं फिर
  • अंत में एक ही सूची

में परिणाम को श्रेणीबद्ध यदि प्रदर्शन

rawData.Provider.CreateQuery<PDFDocument>(qb.rootExperession) 
    .AsEnumerable() 
    .GroupBy(d => d.ShortCode) 
    .Select(g => g.OrderByDescending(d => d.UploadDate)) 
    .OrderByDescending(e => e.First().UploadDate) 
    .SelectMany(e => e) 
    .ToList(); 

कर एक मुद्दा आप कई बेहतर होगा जो प्रत्येक की सामग्री को क्रमबद्ध करता है पहले सब कुछ क्रमबद्ध करने और फिर समूहबद्ध करने के बजाय अलग से समूह।

+0

में कच्चा लिंक मिला, धन्यवाद, यह वही है जो मैं चाहता था। – Ketchup

+1

मैं "ऑर्डरबी" + "ग्रुपबी" + "ऑर्डरबी" डालने के आदेश के बारे में सोच रहा था और यह पूरी तरह उत्तर देता है – EdmundYeung99

+0

यह मुझे टाइप सूची की इकाई लौटा रहा है, लेकिन मैं इसे टाइप ग्रुप, कंपाइलर त्रुटि का होना चाहता हूं प्राप्त करना स्पष्ट रूप से प्रकार 'System.Collections.Generic.List ' को सिस्टम में परिवर्तित नहीं कर सकता है। चयन। जेनेरिक। IEumerable > '। एक स्पष्ट रूपांतरण मौजूद है (क्या आप एक कास्ट गायब हैं?) –

5

वास्तव में, आप संक्षिप्त कोड से समूह नहीं करना चाहते हैं, तो आप उन्हें ऑर्डर करना चाहते हैं। तो निम्न क्वेरी चाल करना चाहिए:

rawData.Provider.CreateQuery<PDFDocument>(qb.rootExperession) 
.ToList() 
.OrderBy(b => b.ShortCode) 
.ThenBy(b => b.UploadDate) 
.ToList() 

संपादित करें क्या तुम सच में एक GroupBy उपयोग करना चाहते हैं, तो आप ऐसा इस तरह से कर सकते हैं:

rawData.Provider.CreateQuery<PDFDocument>(qb.rootExperession) 
.ToList() 
.GroupBy(b => b.ShortCode) 
.SelectMany(grouping => grouping.OrderBy(b => b.UploadDate)) 
.ToList() 

लेकिन मैं इसे हतोत्साहित करते हैं। यदि आप समूह को पहले स्थान पर नहीं चाहते हैं तो समूह बनाने के लिए कोई बिंदु नहीं है!

दूसरा संपादित

मैं तुम्हें समूहों UpdateTime द्वारा भी आदेश दिया चाहता था नहीं मिला।

rawData.Provider.CreateQuery<PDFDocument>(qb.rootExperession) 
.ToList() 
.GroupBy(b => b.ShortCode) 
.Select(grouping => grouping.OrderByDescending(b => b.UploadDate)) 
.OrderByDescending(grouping => grouping.First().UploadDate) 
.SelectMany(grouping => grouping) 
.ToList() 
+0

क्या वह व्यक्ति जो कम से कम बताता है कि उसने ऐसा क्यों किया? – Falanwe

+0

क्या यह तिथि के अनुसार समूह के दोनों तत्वों को आदेश देगा? और फिर समूहित परिणामों को भी ऑर्डर करें? – Ketchup

+0

पहले शॉर्टकोड वाले सभी तत्व पहले परिणामस्वरूप सूची में होंगे, अपडेटटाइम द्वारा आदेश दिया गया है, फिर दूसरे शॉर्टकोड वाले सभी तत्वों को भी आदेश दिया गया है, और इसी तरह। परिणाम उस एक्सेल के समान होगा जब आप एक्सेल में मुख्य रूप से कॉलम द्वारा अपने तत्वों को ऑर्डर करते हैं, फिर दूसरे द्वारा। – Falanwe

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