दिलचस्प पोस्ट
"Java.security.cert.CertificateException: कोई विषय वैकल्पिक नाम मौजूद नहीं" त्रुटि कैसे ठीक करें? एकाधिक डेटाफ्रेम में विभाजन डेटाफ़्रेम एसवीजी लाइनों पर एरो हेड त्रिकोण कैसे रखें? सीएसएस संपत्ति Jquery का उपयोग कर बदल जब घटना का पता लगाने जब "" == s गलत है लेकिन ""। बराबर () सही है पायथन और टस्किनर के साथ एक उलटी गिनती टाइमर बनाना? सुपर () के पहले और बाद के कोड के बीच का अंतर SQL सर्वर में, "SET ANSI_NULLS चालू" क्या होता है? पायथन – लॉगर "ओपनजीएल। आतंक" के लिए कोई संचालक नहीं मिला Windows मेजबान फ़ाइल में पोर्ट संख्या का उपयोग करना पावर बीआई एम्बेड यूआरएल-कई फिल्टर क्या हास्केल में चर है? गिट / मर्कुरियल / बाज़ार बनाम की लोकप्रियता, जो कि MySQL दूरस्थ उपयोग के लिए उपयोगकर्ता जोड़ रहा है क्लोज़र में मैट्रिक्स ट्रांसपाइज़ेशन

LINQ: अलग मूल्य

मेरे पास एक XML से निम्नलिखित आइटम सेट है:

id category 5 1 5 3 5 4 5 3 5 3 

मुझे इन मदों की एक अलग सूची की आवश्यकता है:

 5 1 5 3 5 4 

मैं LINQ में भी श्रेणी और आईडी के लिए कैसे विशिष्ट हूं?

Solutions Collecting From Web of "LINQ: अलग मूल्य"

क्या आप एक से अधिक फ़ील्ड से अलग होने की कोशिश कर रहे हैं? यदि हां, तो बस एक अनाम प्रकार और विशिष्ट ऑपरेटर का उपयोग करें और यह ठीक होना चाहिए:

 var query = doc.Elements("whatever") .Select(element => new { id = (int) element.Attribute("id"), category = (int) element.Attribute("cat") }) .Distinct(); 

यदि आप "बड़े" प्रकार के मूल्यों का एक अलग सेट प्राप्त करने का प्रयास कर रहे हैं, लेकिन केवल विशिष्टता पहलू के लिए गुणों के कुछ सबसेट को देख रहे हैं, तो आप संभवतः अलग चाहते हैं जैसे कि DistinctBy में MoreLINQ में लागू किया गया है:

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

(यदि आप तुलनात्मक रूप से null में पास करते हैं, तो यह कुंजी प्रकार के लिए डिफ़ॉल्ट तुलनाकर्ता का उपयोग करेगा।)

बस अपनी खुद की तुलना के साथ Distinct() उपयोग करें

http://msdn.microsoft.com/en-us/library/bb338049.aspx

जॉन स्केट के उत्तर के अलावा, आप प्रत्येक समूह पुनरावृत्तियों के लिए एक समूह के साथ अद्वितीय समूहों को प्राप्त करने के लिए अभिव्यक्ति द्वारा समूह का भी उपयोग कर सकते हैं:

 var query = from e in doc.Elements("whatever") group e by new { id = e.Key, val = e.Value } into g select new { id = g.Key.id, val = g.Key.val, count = g.Count() }; 

किसी भी अभी भी देख के लिए; यहां एक कस्टम लैम्ब्डा तुलनार को लागू करने का एक और तरीका है

 public class LambdaComparer<T> : IEqualityComparer<T> { private readonly Func<T, T, bool> _expression; public LambdaComparer(Func<T, T, bool> lambda) { _expression = lambda; } public bool Equals(T x, T y) { return _expression(x, y); } public int GetHashCode(T obj) { /* If you just return 0 for the hash the Equals comparer will kick in. The underlying evaluation checks the hash and then short circuits the evaluation if it is false. Otherwise, it checks the Equals. If you force the hash to be true (by assuming 0 for both objects), you will always fall through to the Equals check which is what we are always going for. */ return 0; } } 

तब आप लिंक्डा के लिए एक एक्सटेंशन बना सकते हैं जो लैम्ब्डा में ले जा सकते हैं

  public static IEnumerable<T> Distinct<T>(this IEnumerable<T> list, Func<T, T, bool> lambda) { return list.Distinct(new LambdaComparer<T>(lambda)); } 

उपयोग:

 var availableItems = list.Distinct((p, p1) => p.Id== p1.Id); 

मैं उत्तर के लिए थोड़ा देर कर रहा हूं, लेकिन यदि आप पूरे तत्व चाहते हैं, तो आप ऐसा करना चाहते हैं, न केवल उन मूल्यों को जिन्हें आप समूह द्वारा करना चाहते हैं:

 var query = doc.Elements("whatever") .GroupBy(element => new { id = (int) element.Attribute("id"), category = (int) element.Attribute("cat") }) .Select(e => e.First()); 

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

 // First Get DataTable as dt // DataRowComparer Compare columns numbers in each row & data in each row IEnumerable<DataRow> Distinct = dt.AsEnumerable().Distinct(DataRowComparer.Default); foreach (DataRow row in Distinct) { Console.WriteLine("{0,-15} {1,-15}", row.Field<int>(0), row.Field<string>(1)); }