"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > LINQ पूर्ण बाहरी कनेक्शन के ऑपरेशन विधि की विस्तृत व्याख्या

LINQ पूर्ण बाहरी कनेक्शन के ऑपरेशन विधि की विस्तृत व्याख्या

2025-03-13 को पोस्ट किया गया
ब्राउज़ करें:526

How to Perform a Full Outer Join in LINQ?

लिनक - पूर्ण बाहरी कनेक्शन

सवाल:

]

उत्तर:

1। ] ] यह ienumerable a, Ienumerable b, Func selectkeya, Func selectkeyb, Func प्रक्षेपण, टा डिफ़ॉल्ट = डिफ़ॉल्ट (टीए), टीबी डिफ़ॉल्टब = डिफ़ॉल्ट (टीबी), IequalityComparer cmp = null) { cmp = cmp ?? var alookup = a.tolookup (selectkeya, cmp); var blookup = b.tolookup (selectKeyB, cmp); var keys = नया हैशसेट (alookup.select (p => p.key), cmp); keys.unionwith (blookup.select (p => p.key)); var Join = कुंजी से कुंजी से Alookup में XA से [कुंजी] XB से Blookup में [कुंजी] .Defaultifempty (डिफ़ॉल्टब) प्रक्षेपण का चयन करें (xa, xb, कुंजी); ज्वाइन करें; }

2। ] एक पूर्ण बाहरी कनेक्शन करने के लिए, हम निम्न कोड का उपयोग कर सकते हैं:

public static IEnumerable FullOuterJoin(
    this IEnumerable a,
    IEnumerable b,
    Func selectKeyA,
    Func selectKeyB,
    Func projection,
    TA defaultA = default(TA),
    TB defaultB = default(TB),
    IEqualityComparer cmp = null)
{
    cmp = cmp ?? EqualityComparer.Default;
    var alookup = a.ToLookup(selectKeyA, cmp);
    var blookup = b.ToLookup(selectKeyB, cmp);

    var keys = new HashSet(alookup.Select(p => p.Key), cmp);
    keys.UnionWith(blookup.Select(p => p.Key));

    var join = from key in keys
               from xa in alookup[key].DefaultIfEmpty(defaultA)
               from xb in blookup[key].DefaultIfEmpty(defaultB)
               select projection(xa, xb, key);

    return join;
}
3। ]

में अस्थायी

कथन

अंतिम नाम में मिलान रिकॉर्ड का एक अस्थायी संग्रह बनाता है, हमें यह सुनिश्चित करने के लिए defaultifempty () लागू करने की अनुमति देता है। यह वास्तव में एक बाएं बाहरी कनेक्शन को लागू करता है, न कि पूर्ण अर्थ में एक पूर्ण बाहरी कनेक्शन। पूर्ण बाहरी कनेक्शन प्राप्त करने के लिए, आपको ऊपर अनुकूलित fullouterjoin

एक्सटेंशन विधि का उपयोग करने की आवश्यकता है।
var outerJoin = from first in firstNames
                join last in lastNames
                on first.ID equals last.ID
                into temp
                from last in temp.DefaultIfEmpty()
                select new
                {
                    id = first != null ? first.ID : last.ID,
                    firstname = first != null ? first.Name : string.Empty,
                    surname = last != null ? last.Name : string.Empty
                };

-------------------- 1 जॉन डो 2 मुकदमा 3 स्मिथ

5। एक एक्सटेंशन विधि प्रदान करता है जो आपको बेमेल रिकॉर्ड के लिए डिफ़ॉल्ट मान निर्दिष्ट करने की अनुमति देता है। उदाहरण में, हम बेमेल नाम के लिए string.empty निर्दिष्ट करते हैं और बेमेल आईडी के लिए एक नकारात्मक पूर्णांक। 6। ] ऐसा इसलिए है क्योंकि tokookup () ऑपरेशन O (n) समय लेता है, और बाद के संचालन को O (n m) समय की आवश्यकता होती है। 7। पूरी तरह से बाहरी कनेक्शन का यह कार्यान्वयन वर्तमान में LINQ मानक का हिस्सा नहीं है, लेकिन इसे भविष्य के संस्करणों में शामिल करने की सिफारिश की गई है। मानक LINQ सीधे पूर्ण बाहरी कनेक्शन का समर्थन नहीं करता है, और इसे लागू करने के लिए एक कस्टम एक्सटेंशन विधि की आवश्यकता होती है।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3