वस्तुओं की सूची से गुणों की एक अनूठी सूची प्राप्त करने के लिए मैं Linq का उपयोग कैसे करूं?


171

मैं Linq का उपयोग करने की कोशिश कर रहा हूं, आइडी की एक सूची को वापस करने के लिए वस्तुओं की एक सूची दी गई है जहां आईडी एक संपत्ति है। मैं प्रत्येक ऑब्जेक्ट के माध्यम से लूपिंग के बिना ऐसा करने में सक्षम होना चाहता हूं और मुझे मिलने वाली अद्वितीय आईडी को बाहर निकालना है।

मेरे पास MyClass प्रकार की वस्तुओं की एक सूची है और इस वर्ग का एक गुण एक आईडी है।

public class MyClass
{
  public int ID { get; set; }
}

जो मैं करना चाहता हूं, मुझे उन Ids की सूची वापस करने के लिए एक Linq क्वेरी लिखनी है

मैं ऐसा कैसे कर सकता हूं IList<MyClass>कि यह IEnumerable<int>आईडी का रिटर्न देता है ?

मुझे यकीन है कि यह MyClass सूची में प्रत्येक आइटम के माध्यम से लूप के बजाय एक या दो लाइनों में करना संभव है और एक सूची में अद्वितीय मूल्यों को जोड़ना होगा।

एक सुरुचिपूर्ण समाधान बनाने में कोई मदद बहुत सराहना की जाएगी!


1
इसके अलावा आप MoreLinqDistinctBy में ध्यान दें जो आप के आधार पर अलग एस दे देंगे । उपयोग:MyClassIDvar distincts = list.DistinctBy(x => x.ID);
nawfal

जवाबों:


319
IEnumerable<int> ids = list.Select(x=>x.ID).Distinct();

वाह! मुझे लगा कि यह कुछ आसान है ... मैं इसके बारे में सोच भी नहीं सकता था। ऐसा लगता है कि मुझे कुछ और समय बिताने के लिए जाना जा रहा है ताकि मैं खुद को लिनिक से परिचित करा सकूं।
मेज़ोइड

29

डिस्टि्रक्ट ऑपरेटर का उपयोग करें :

var idList = yourList.Select(x=> x.ID).Distinct();

5
(मामूली नामकरण बिंदु; यह आईडी की "सूची" नहीं है - यह एक आलसी मूल्यांकन किया गया है IEnumerable <int> - जब तक आप कॉल नहीं करते। तोलिस्ट (), निश्चित रूप से;
मार्क ग्रेवेल

@Marc, आलसी eval का एक सरल 2 लाइन अन्वेषण? कृपया और धन्‍यवाद: D
masfenix

2
@masfenix Lazy eval का मतलब है कि ऑपरेशन तब तक नहीं किया जाता है जब तक कि यह वास्तव में उपयोग नहीं किया जाता है। इस मामले में, आईडी का चयन करना और केवल अलग-अलग लोगों का चयन करना आवश्यक नहीं है जब इस उत्तर में कथन निष्पादित किया जाता है। यह तब किया जाएगा जब आप वास्तव में आइडलिस्ट के माध्यम से आगे बढ़ना शुरू करते हैं, उदाहरण के लिए एक फ़ॉरच लूप में।
मार्क मेउर

13

एक्सटेंशन के साथ सीधे लाइनक का उपयोग करना Distinct():

var idList = (from x in yourList select x.ID).Distinct();

3
        int[] numbers = {1,2,3,4,5,3,6,4,7,8,9,1,0 };
        var nonRepeats = (from n in numbers select n).Distinct();


        foreach (var d in nonRepeats)
        {

            Response.Write(d);
        }

आउटपुट

1 2 3 4 5 6 7 8 9 0


1
इस सवाल का जवाब नहीं है, और यहां तक ​​कि अगर यह करता है, कुछ भी नया नहीं जोड़ता है।
नवफल

2

डिस्टिंच लेते समय हमें IEnumerable में भी कास्ट करना होगा। यदि सूची मॉडल का साधन है, तो कोड को इस तरह लिखना होगा

 IEnumerable<T> ids = list.Select(x => x).Distinct();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.