आप सूचियों शब्दकोशों और अन्य शब्दकोशों युक्त शब्दकोशों के बारे में पूछा।
मैं एक इसी तरह के विषय हाल ही में, जहां मैं एक queryable शब्दकोश (यानी एक विस्तार विधि है जो लैम्ब्डा पैरामीटर के रूप में एक प्रश्न अभिव्यक्ति पारित करने के लिए अनुमति देता है) करना चाहते थे किया था, कि आप की तरह उपयोग कर सकते हैं:
var result = myDictionary.QueryDictionary(w => myList.Any(a => a == w.Key));
इस कोड लाइन का उद्देश्य यह जांचना है कि शब्दकोश की कोई भी कुंजी मेरी सूची में निहित है या नहीं।
// extension method using lambda parameters
public static Dictionary<string, T> QueryDictionary<T>(
this Dictionary<string, T> myDict,
Expression<Func<KeyValuePair<string,T>, bool>> fnLambda)
{
return myDict.AsQueryable().Where(fnLambda).ToDictionary(t => t.Key, t => t.Value);
}
यह हर शब्दकोश किस प्रकार string
और हर ऑब्जेक्ट प्रकार T
की मदों की कुंजी है के लिए इस्तेमाल किया जा सकता है:
तो मैं क्या किया यह है, मैं निम्नलिखित विस्तार विधि लिखा था।
अब आप आसानी से एक लैम्ब्डा अभिव्यक्ति गुजर, निम्न उदाहरण में से प्रश्नों लिख सकते हैं:
var list1 = new List<string>() { "a", "b" };
var myDict = new Dictionary<string, object>();
myDict.Add("a", "123"); myDict.Add("b", "456"); myDict.Add("c", "789");
var result = myDict.QueryDictionary(w => list1.Any(a => a == w.Key));
परिणाम, आइटम ए और बी में शामिल होंगे, क्योंकि वे List1 में शामिल हैं।
तुम भी शब्दकोशों के शब्दकोश क्वेरी कर सकता है, यहाँ LinqPad के लिए एक सी # उदाहरण है, लेकिन यह (बस .Dump()
बयान टिप्पणी और उन्हें Console.WriteLine(...)
बयान की जगह) एक सांत्वना आवेदन के रूप में इस्तेमाल किया जा सकता के रूप में अच्छी तरह से:
void Main()
{
// *** Set up some data structures to be used later ***
var list1 = new List<string>() { "a", "b", "d" }; // a list
var myDict = new Dictionary<string, object>(); // the dictionary
myDict.Add("a", "123"); myDict.Add("b", "456"); myDict.Add("c", "789");
var myDict2 = new Dictionary<string, object>(); // 2nd dictionary
myDict2.Add("a", "123"); myDict2.Add("b", "456"); myDict2.Add("c", "789");
myDict.Add("d", myDict2); // add 2nd to first dictionary
// *** 1. simple query on dictionary myDict ***
var q1 = myDict.QueryDictionary(w => list1.Any(a => a == w.Key));
q1.Dump();
// *** 2. query dictionary of dictionary (q3 contains result) ***
var q2 =
(Dictionary<string, object>)q1.QueryDictionary(w => w.Key.Equals("d")).First().Value;
var q3 = q2.QueryDictionary(w => w.Key.Equals("b"));
q3.Dump();
}
// *** Extension method 'QueryDictionary' used in code above ***
public static class Extensions
{
public static Dictionary<string, T> QueryDictionary<T>(
this Dictionary<string, T> myDict,
Expression<Func<KeyValuePair<string, T>, bool>> fnLambda)
{
return myDict.AsQueryable().Where(fnLambda).ToDictionary(t => t.Key, t => t.Value);
}
}
के बाद से इस समाधान जेनेरिक्स उपयोग कर रहा है, तो आप खोज पैरामीटर के रूप में किसी भी लैम्ब्डा अभिव्यक्ति पारित कर सकते हैं, तो यह बहुत लचीला है।
बिल्कुल सही। धन्यवाद। – Brian