मेरे पास एक जटिल LINQ क्वेरी है (LINQ 2 EF का उपयोग करके) जो डुप्लिकेट परिणाम लौटा सकती है और मैं डुप्लिकेट से बचने के लिए .Distinct()
विधि का उपयोग कर रहा हूं। यहाँ कंकाल है:एक्सएमएल फ़ील्ड को अनदेखा करते समय LINQ का चयन करें
var subQuery1 = // one query...
var subQuery2 = // another query...
var result = subQuery1.Distinct().Union(subQuery2.Distinct()).ToArray();
उप प्रश्नों में से प्रत्येक एक और टेबल के साथ एक आम उपयोगकर्ता तालिका में शामिल होने और एक 'जहां' क्वेरी निष्पादित, परिणाम बाद में .Union(...)
में मिलाया जाता है। यह ठीक काम किया जब तक तालिका एक XML स्तंभ है, जो इस अपवाद में परिणाम है शामिल करने के लिए संशोधित किया गया था:
XML डेटा प्रकार अलग रूप में चयन नहीं किया जा सकता है क्योंकि यह तुलनीय
इस मामले मैं में नहीं है अगर एक्सएमएल कॉलम परिणामों के बराबर है तो परवाह नहीं है। असल में मुझे केवल यह आश्वासन दिया जाना चाहिए कि प्राथमिक कुंजी UserId
परिणाम में अलग है।
क्या Distinct()
का उपयोग करने का कोई तरीका है लेकिन एक्सएमएल कॉलम को अनदेखा करें या यह सुनिश्चित करने के लिए एक आसान तरीका है कि मैं परिणाम से रिकॉर्ड UserId
के साथ एक कुशल तरीके से हटा देता हूं? आदर्श रूप से यह डेटाबेस से डुप्लिकेट रिकॉर्ड पुनर्प्राप्त नहीं करेगा और डुप्लिकेट को हटाने के लिए पोस्ट-प्रोसेसिंग की आवश्यकता नहीं होगी।
अद्यतन: मुझे पता चला गया है तो Linq2Objects के बाद से comparer के किसी भी प्रकार की कोई जरूरत एक्सएमएल अलग चयन मुद्दा नहीं है नहीं है कि अगर मैं अपने प्रश्नों को क्रमानुसार समय से आगे arrays के लिए। उदाहरण के लिए मैं यह कर सकता:
var subQuery1 = // one query...
var subQuery2 = // another query...
var result =
subQuery1.Distinct().ToArray().Union(
subQuery2.Distinct().ToArray())
.ToArray();
तो क्या मैं वास्तव में के लिए देख रहा हूँ एक तरह से मध्यवर्ती प्रश्नों serializing से बचने और एक Linq2Entities सीधे कि फोन डुप्लिकेट UserId
रों के साथ रिकॉर्ड लाने नहीं होगा करना है। अब तक सभी उत्तरों के लिए धन्यवाद।
सटीक समस्या का उत्तर नहीं है, लेकिन सामान्य रूप से यदि आप कुछ संक्षिप्तकरण के साथ 'विशिष्ट' चाहते हैं, तो सीधे 'संघ' का उपयोग करें। 'यूनियन', 'एक्सेप्ट', 'इंटरसेक्ट' इत्यादि जैसे ऑपरेशन सेट करें वैसे भी डुप्लिकेट हटा दें। तो आपके मामले में, बस: 'subQuery1.Union (subQuery2)। ToArray()' – nawfal