একটি অভিধান <স্ট্রিং, স্ট্রিং> ফিরিয়ে দেওয়ার জন্য লিনকিউ কোয়েরি


218

আমার কাছে মাইক্লাসের একটি সংগ্রহ রয়েছে যা আমি লিনিকিউ ব্যবহার করে পৃথক মান পেতে কোয়েরি করতে চাই এবং ফলাফল হিসাবে << স্ট্রিং> স্ট্রিং> ফিরে পেতে পারি, তবে আমি কীভাবে এটি এর চেয়ে সহজতর করতে পারি তা বুঝতে পারি না আমি নীচে করছি। আমার ক্লাসের কোডটি কী হতে পারে যা আমি <স্ট্রিং, স্ট্রিং> অভিধান হিসাবে আমার ফলাফল হিসাবে ব্যবহার করতে পারি?

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
হতে পারে আপনি যা সন্ধান করছেন তা হ'ল আইডোরিয়ালিটির সাজানো ডিকোশনারি বাস্তবায়ন। অন্যথায় একটি অভিধানে বাছাই করা অর্থহীন।
ফেডার

উত্তর:


366

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
মেহরদাদ, এই পয়েন্টার জন্য ধন্যবাদ। এটি আমি যে দিকে যাচ্ছিলাম সে দিকটি ছিল তবে এটি অবশ্যই টোড शब्दकोशের সঠিক ওভারলোডকে উপেক্ষা করেছে।
স্কট আইভে

18

তাকান ToLookupএবং / অথবা ToDictionaryএক্সটেনশন পদ্ধতি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.