सवाल:
]
उत्तर:
1। ] ] यह ienumerable2। ] एक पूर्ण बाहरी कनेक्शन करने के लिए, हम निम्न कोड का उपयोग कर सकते हैं:
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
};
5।
एक एक्सटेंशन विधि प्रदान करता है जो आपको बेमेल रिकॉर्ड के लिए डिफ़ॉल्ट मान निर्दिष्ट करने की अनुमति देता है। उदाहरण में, हम बेमेल नाम के लिए string.empty
निर्दिष्ट करते हैं और बेमेल आईडी के लिए एक नकारात्मक पूर्णांक।
6।
] ऐसा इसलिए है क्योंकि tokookup ()
ऑपरेशन O (n) समय लेता है, और बाद के संचालन को O (n m) समय की आवश्यकता होती है।
7।
पूरी तरह से बाहरी कनेक्शन का यह कार्यान्वयन वर्तमान में LINQ मानक का हिस्सा नहीं है, लेकिन इसे भविष्य के संस्करणों में शामिल करने की सिफारिश की गई है। मानक LINQ सीधे पूर्ण बाहरी कनेक्शन का समर्थन नहीं करता है, और इसे लागू करने के लिए एक कस्टम एक्सटेंशन विधि की आवश्यकता होती है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3