2013-12-13 4 views
5

मैं C# ढांचा 3.5 उपयोग कर रहा हूँ ..कस्टम सूची से अलग सूची कैसे प्राप्त करें?

मेरे यहाँ वर्ग

public class KonumBilgisi 
{ 

    public string Enlem { get; set; } 
    public string Boylam { get; set; } 
    public string KonumAdi { get; set; } 
    public DateTime Tarih { get; set; } 
    public byte SucTuruId { get; set; } 

} 

मैं एक सूची

सूची konumlar है;

अच्छी तरह से, मैं आइटम है कि उनके enlem और एक दूसरे boylam चर के बराबर प्राप्त करना चाहते हैं ..

आप नीचे दिए गए

enter image description here

तस्वीर पर देख जैसा कि मैंने enlem और boylam compate करना चाहते हैं और यदि यह बराबर है तो मैं उन्हें अलग-अलग सूची में ले जाना चाहता हूं ..

मैं इसे लूप के साथ कर सकता हूं लेकिन LINQ का उपयोग करना चाहता हूं लेकिन मैं ऐसा नहीं कर सका। मैं GroupBy इस्तेमाल किया लेकिन यह गलत नहीं करता ..

var distinctList = konumlar.GroupBy(x => x.Enlem) 
         .Select(g => g.First()) 
         .ToList().GroupBy(s=>s.Boylam).Select(g => g.First()) 
         .ToList(); 

संपादित असल में मैं अपने quesion अच्छी तरह से ..

शायद अलग सही शब्द नहीं है समझाने .. मैं आइटम जो प्रत्येक के बराबर होती है कर रहे हैं अलग करना चाहते सके अन्य ..

जैसे:

मैं एक सूची में pendik आइटम ले जाएगा और दूसरों konumlar में होगा लेकिन pendik आइटम konuml से निकाल दिया जाएगा ar सूची

संपादित 2

ठीक है, मैं उस तरह सूची अलग करना चाहते हैं

enter image description here

enter image description here

+0

आप बराबर या विशिष्ट वस्तुओं को निकालना चाहते हैं? –

+0

निकालने और सूची से भी विच्छेदन .. मेरा मतलब है, मैं उन्हें एक-दूसरे को अलग करना चाहता हूं – ertan2002

+0

यदि आप वांछित परिणाम दिखाएंगे तो इससे मदद मिलेगी। आप दूसरी सूची का भी जिक्र कर रहे हैं लेकिन आपने इसे नहीं दिखाया है। –

उत्तर

4

आप लगभग देखते हैं - बल्कि दो अलग-अलग GroupBy कॉल का उपयोग करने से, दो भाग वाली कुंजी के साथ एक एकल का उपयोग करें:

var distinctList = konumlar 
    .GroupBy(s => new {s.Enlem, s.Boylam}) 
    .Select(g => g.First()) 
    .ToList(); 

संपादित करें: डुप्लिकेट के साथ सभी वस्तुओं को छोड़कर लोगों पाने के लिए, के रूप में इस क्वेरी को संशोधित:

var noPendiks = konumlar 
    .GroupBy(s => new {s.Enlem, s.Boylam}) 
    .Where(g => g.Count() == 1) 
    .Select(g => g.Single()) // You know there's only one 
    .ToList(); 

ऊपर आप "pendik" एक को छोड़कर सभी आइटम दे देंगे। केवल "pendik" एस पाने के लिए, नीचे दिए गए क्वेरी का उपयोग करें:

var pendiks = konumlar 
    .GroupBy(s => new {s.Enlem, s.Boylam}) 
    .Where(g => g.Count() > 1) 
    .SelectMany(g => g) 
    .ToList(); 
+0

'समूहबी' में अज्ञात प्रकारों के माध्यम से उस समग्र कुंजी की उपयोगिता को कम नहीं किया जा सकता है। आप समानता के स्वचालित कार्यान्वयन से सीधे लाभ उठाते हैं। –

+0

मुझे लगता है कि मैंने उपरोक्त लिखा है, लेकिन मुझे अलग-अलग चीजें चाहिए, इसके लिए खेद है, मैंने अपना प्रश्न अपडेट किया है, क्या आप इसे देख सकते हैं? – ertan2002

+0

अरे यह काम करता है मैं कैसे चाहता हूं .. बहुत बहुत धन्यवाद .. – ertan2002

2

आप अलग() Linq समारोह, फिर भी उपयोग कर सकते हैं, जो केवल एक समान आइटमों का काम करता है। यदि आप एक DistinctBy() चाहते हैं तो आप एक DistitExtensions वर्ग को DistinctBy() विधि के साथ बना सकते हैं।

यहाँ एक है जो मुझे बहुत आम का उपयोग करें:

/// <summary> 
///  Provides common extension methods on LINQ members. 
/// </summary> 
public static class LinqExtensions 
{ 
    #region Members 

    public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector) 
    { 
     HashSet<TKey> seenKeys = new HashSet<TKey>(); 
     foreach (TSource element in source) 
     { 
      if (seenKeys.Add(keySelector(element))) 
      { 
       yield return element; 
      } 
     } 
    } 

    #endregion Members 
} 

के रूप में यह प्रयोग करें:

var distinctList = konumlar.DistinctBy(x => x.property && x.property2 && ...); 

तरह का संबंध

+0

धन्यवाद, यह अच्छा लग रहा है लेकिन मुझे अपवाद मिला। त्रुटि ऑपरेटर '&&' प्रकार 'स्ट्रिंग' और 'स्ट्रिंग' के संचालन पर लागू नहीं किया जा सकता .. उत्तर में, मैंने अपना प्रश्न अपडेट किया .. क्या आप इसकी तलाश कर सकते हैं? – ertan2002

1

मुझे लगता है कि आप यही चाहते है:

List<KonumBilgisi> distinctList = konumlar 
    .GroupBy(k => new { k.Enlem, k.Boylam }) 
    .SelectMany(x => x.GroupBy(k => k.Boylam).First()) 
    .ToList(); 

यह अद्वितीय आइटम acco का चयन करें उन दो गुणों को रेड करना, फिर यह Boylam के अनुसार अद्वितीय आइटम का चयन करें।

+0

क्षमा करें, मैंने अपना प्रश्न संपादित किया। यह मेरा गलत है .. – ertan2002

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