LINQ क्वेरी में मुझे एक ग्रुप BY के साथ MAX पंक्ति कैसे मिलेगी?


94

मैं SQL क्वेरी का पालन करने के लिए LINQ में एक रास्ता खोज रहा हूँ।

Select max(uid) as uid, Serial_Number from Table Group BY Serial_Number

वास्तव में इस एक पर कुछ मदद की तलाश में। Group Byसिंटैक्स की वजह से उपरोक्त क्वेरी को प्रत्येक सीरियल नंबर का अधिकतम यूआईडी मिलता है ।

जवाबों:


92
        using (DataContext dc = new DataContext())
        {
            var q = from t in dc.TableTests
                    group t by t.SerialNumber
                        into g
                        select new
                        {
                            SerialNumber = g.Key,
                            uid = (from t2 in g select t2.uid).Max()
                        };
        }

1
मैं दोनों को उत्तर के रूप में स्वीकार करना चाहता हूं, लेकिन मुझे लगता है कि मैं ऐसा नहीं कर सकता क्योंकि मैंने आप दोनों लोगों के लिए मतदान किया। बहुत बहुत धन्यवाद!!!
SpoiledTechie.com

69
var q = from s in db.Serials
        group s by s.Serial_Number into g
        select new {Serial_Number = g.Key, MaxUid = g.Max(s => s.uid) }

मैं दोनों को उत्तर के रूप में स्वीकार करना चाहता हूं, लेकिन मुझे लगता है कि मैं नहीं कर सकता इसलिए मैंने आप दोनों लोगों के लिए मतदान किया। बहुत बहुत धन्यवाद!!!
SpoiledTechie.com 15

यह भी ध्यान दें कि मैक्स फ़ंक्शन में => लैम्ब्डा अभिव्यक्ति के लिए चर कुछ भी हो सकता है (s => s.uid, tv => tv.uid, asdf => asdf.uid)। लाइनिक स्वचालित रूप से सीरियल के तत्वों के चयन के रूप में इसे पहचान लेगा।
माइकल

30

विधियों में चेन फॉर्म:

db.Serials.GroupBy(i => i.Serial_Number).Select(g => new
    {
        Serial_Number = g.Key,
        uid = g.Max(row => row.uid)
    });

22

मैंने LinqPad में DamienG के उत्तर की जाँच की है। के बजाय

g.Group.Max(s => s.uid)

होना चाहिए

g.Max(s => s.uid)

धन्यवाद!


10
यह शायद डेमियनजी के जवाब पर टिप्पणी करना चाहिए।
21

10

उत्तर ठीक हैं यदि आपको केवल उन दो क्षेत्रों की आवश्यकता है, लेकिन अधिक जटिल वस्तु के लिए, शायद यह दृष्टिकोण उपयोगी हो सकता है:

from x in db.Serials 
group x by x.Serial_Number into g 
orderby g.Key 
select g.OrderByDescending(z => z.uid)
.FirstOrDefault()

... इससे "नए का चयन करें" से बचेंगे


मुझे यह पसंद है - क्या आप जानते हैं कि क्या यह अन्य उत्तरों की तरह ही कुशल है?
noelicus

आपने क्वेरी सिंटैक्स का उपयोग अंत तक सभी तरह से किया, जहां आपने विधि सिंटैक्स पर स्विच किया। क्या आपको करना पड़ा? क्या आपके समाधान के लिए एक पूर्ण क्वेरी सिंटैक्स फ़ॉर्म है?
सेठ

0

LINQ lamda एक्सप्रेशन में GroupBy और SelectMany का उपयोग करके यह किया जा सकता है

var groupByMax = list.GroupBy(x=>x.item1).SelectMany(y=>y.Where(z=>z.item2 == y.Max(i=>i.item2)));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.