नहीं एक साधारण सवाल। यहां एक समाधान है (जो मेरे लिए बहुत जटिल लगता है, लेकिन यह काम करता है)।
- एकाधिक सूचियों इंटरसेक्ट डेटासेट से LINQ का उपयोग कर प्रत्येक पंक्ति से ईद मूल्य प्राप्त होने वाली पंक्तियां में से एक है के सभी के सभी समान मूल्यों
- एक पंक्ति के एक भी घटना का पता लगाएं खोजने के लिए मिलान ids
डेटाटेबल पर लिंक का उपयोग करने के लिए, this article प्रारंभ के लिए देखें।
आप इस
var ids = dt.AsEnumerable().Select (d => d.Field<int>("ID")).OfType<int>();
कई तालिकाओं
var setsOfIds = dataTables.Select (
t => t.AsEnumerable().Select (x => x.Field<int>("ID")).OfType<int>());
की तरह और से एक मेज से आईडी प्राप्त एकाधिक सूचियों एक दूसरे को काटना करने के लिए, this article की कोशिश कर सकते। वहां विधियों में से एक का उपयोग करके आप सभी आईडी के चौराहे को प्राप्त कर सकते हैं।
जॉन स्कीट सहायक विधि
public static class MyExtensions
{
public static List<T> IntersectAll<T>(this IEnumerable<IEnumerable<T>> lists)
{
HashSet<T> hashSet = new HashSet<T>(lists.First());
foreach (var list in lists.Skip(1))
{
hashSet.IntersectWith(list);
}
return hashSet.ToList();
}
}
इस्तेमाल करते हुए हम
var commonIds = setsOfIds.InsersectAll();
अब आम आईडी द्वारा DataTables और फिल्टर से सभी पंक्तियों को समतल लिख सकते हैं:
var rows = dataTables.SelectMany (t => t.AsEnumerable()).Where(
r => commonIds.Contains(r.Field<int>("ID")));
अब समूह आईडी द्वारा और प्रत्येक पंक्ति का पहला उदाहरण लें:
var result = rows.GroupBy (r => r.Field<int>("ID")).Select (r => r.First());
किसी भी समय मैंने अतीत में अंतर का उपयोग किया है और अस्थिर आ गया है, यह पूरी तरह से समानता तुलना के कारण रहा है - आदिम प्रकारों के अंक के साथ काम करना आमतौर पर ठीक है, लेकिन जटिल प्रकारों को तुलना करने के संदर्भ में मुझे हमेशा ओवरराइड करना पड़ता है । यदि आप पहले से नहीं हैं तो जांच करने योग्य मूल्य – SpaceBison