LINQ क्वेरी एक शब्दकोश <string, string> को वापस करने के लिए


218

मेरे पास MyClass का एक संग्रह है जिसे मैं अलग-अलग मान प्राप्त करने के लिए LINQ का उपयोग करके क्वेरी करना चाहूंगा, और परिणाम के रूप में एक शब्दकोश <string, string> प्राप्त कर सकता हूं, लेकिन मैं यह पता नहीं लगा सकता कि मैं इसे कैसे सरल बना सकता हूं। नीचे कर रहा हूँ। कुछ क्लीनर कोड क्या होगा जो मैं अपने परिणाम के रूप में शब्दकोश <string, string> पाने के लिए उपयोग कर सकता हूं?

var desiredResults = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);

var queryResults = (from MyClass mc in myClassCollection
                    orderby bp.SomePropToSortOn
                    select new KeyValuePair<string, string>(mc.KeyProp, mc.ValueProp)).Distinct();

foreach (var item in queryResults)
{
    desiredResults.Add(item.Key.ToString(), item.Value.ToString());
}

6
आप क्या चाहते हैं कि यह डुप्लिकेट कुंजियों के साथ क्या करे? बस पहले ले लो और बाद वाले को अनदेखा करें? ध्यान रखें कि शब्दकोशों का आदेश नहीं दिया गया है, इसलिए क्वेरी में आपके आदेश का कोई प्रभाव नहीं होगा ...
जॉन स्कीट

1
हो सकता है कि आप जो खोज रहे हों, वह IDEDIA का सॉर्टेडवार्ड कार्यान्वयन हो। अन्यथा एक शब्दकोश में छँटाई व्यर्थ है।
Fede

जवाबों:


367

ToDictionaryसीधे विधि का उपयोग करें ।

var result = 
  // as Jon Skeet pointed out, OrderBy is useless here, I just leave it 
  // show how to use OrderBy in a LINQ query
  myClassCollection.OrderBy(mc => mc.SomePropToSortOn)
                   .ToDictionary(mc => mc.KeyProp.ToString(), 
                                 mc => mc.ValueProp.ToString(), 
                                 StringComparer.OrdinalIgnoreCase);

1
मेहरदाद, इस पर सूचक के लिए धन्यवाद। यह वह दिशा थी, जिसमें मैं जा रहा था, लेकिन टोबो के सही ओवरलोड को देख रहा था।
स्कॉट Ivey

18

को देखो ToLookupऔर / या ToDictionaryविस्तार के तरीकों।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.