मेरे पास डेटा के दो सेट हैं (जटिल वस्तुओं की सूची या एसक्यूएल डेटा - LINQ से Entities) जहां मैं डेटा के दो सेटों के चौराहे को खोजने की कोशिश कर रहा हूं। विशेष रूप से परिसर संपत्ति, "HashData" के एक चौराहे के रूप में नीचे देखी गई:डेटा के दो सेट (सूचियों) का छेड़छाड़
बाईं तरफ के सेट, 10000 के बारे में पंक्तियों होने की संभावना है सही पर सेट जबकि हमेशा के बारे में 100 के एक सबसेट है पंक्तियों। मुझे एहसास है कि अगर मैं इसे संग्रहीत करते समय बाईं ओर सेट को "हैशदाता" से सॉर्ट करता हूं, तो खोज करना कुछ प्रकार की बाइनरी सर्च एल्गोरिदम का उपयोग करके बहुत तेज़ होगा, हालांकि मैं इस सवाल से संबंधित कारणों के लिए ऐसा नहीं कर सकता।
डेटा के छोटे सबसेट एसक्यूएल में संग्रहीत कभी नहीं किया गया है (केवल एक एसक्यूएल व्याख्यात्मक प्रयोजनों के लिए नीचे दी गई तालिका में दिखाया)। यह रनटाइम पर List<ShowData>
में प्रस्तुत किया गया है।
फिलहाल मैं डेटा के माध्यम से एक दयनीय पाश कर रहा हूँ और इस तरह से मेल खाते (जहां recording
100 पंक्ति सूची है और ShowData
10000 पंक्ति सूची है):
List<ShowData> ShowData = (from showData in context.ShowDatas
where (showData.Show.Id == advert.Id)
orderby showData.HashData ascending
select showData).ToList();
foreach (ShowData recording in recordingPoints) {
foreach (ShowData actual in ShowData) {
if (recording.HashData == actual.HashData) {
}
}
}
तो मूल रूप से क्या im कोशिश कर करने के लिए है:
शोडाटा ऑब्जेक्ट्स (बड़ा सेट) की एक सूची लौटाएं जहां शोडाटा में किसी भी हैशडेटा (छोटे सेट से) पाया जाता है लेकिन LINQ से Entity प्रारंभिक क्वेरी डीबी में मिलता है।
private IEnumerable<ShowData> xyz(List<ShowData> aObj, List<ShowData> bObj)
{
IEnumerable<string> bStrs = bObj.Select(b => b.HashData).Distinct();
return aObj.Join(bStrs, a => a.HashData, b => b, (a, b) => a);
}
हाय जोश तुम जैसा कि यहाँ दिखाया एक IEquality comparer लिखने के लिए की आवश्यकता होगी , मैंने यह कोशिश की: 'सार्वजनिक बूल बराबर (शोडाटा एक्स, शोडाटा वाई) { // जांचें कि तुलना की गई वस्तुएं एक ही डेटा का संदर्भ देती हैं या नहीं। यदि (ऑब्जेक्ट। रेफरेंस एक्वाल्स (एक्स, वाई)) सत्य वापस आते हैं; // जांचें कि तुलना की गई वस्तुओं में से कोई भी शून्य है या नहीं। यदि (ऑब्जेक्ट। रेफरेंस एक्वाल्स (एक्स, नल) || ऑब्जेक्ट। रेफरेंस एक्वाल्स (वाई, नल)) झूठी वापसी; // जांचें कि उत्पाद की संपत्ति बराबर है या नहीं। वापसी x.HashData == y.HashData; } ' – user1112324
लेकिन im यकीन नहीं है कि यह कैसे संकलित रूप में मैं कोई त्रुटि मिलती है: IEnumerable इंटरसेक्ट –
user1112324
के लिए एक परिभाषा शामिल नहीं है @ user1112324 - क्या आप वाकई 'System.Linq' और 'के लिए एक' का उपयोग कर के इस बयान को शामिल किया है कर रहे हैं System.Collections.Generic '? इंटरसेक्ट निश्चित रूप से IENumerable का एक विस्तार तरीका है। –