লিনকিউ গ্রুপ দ্বারা অভিধান অভিধানে


161

আমি একটি Dictionary<string, List<CustomObject>>থেকে একটি তৈরি করতে লিনকিউ ব্যবহার করার চেষ্টা করছি List<CustomObject>। আমি এটি "var" ব্যবহার করে কাজ করতে পারি তবে আমি বেনামে প্রকার ব্যবহার করতে চাই না। আমার যা আছে তা এখানে

var x = (from CustomObject o in ListOfCustomObjects
      group o by o.PropertyName into t
      select t.ToList());

আমি Cast<>()একবার লাইনকিউ লাইব্রেরি থেকে ব্যবহার করার চেষ্টা করেছি x, তবে এটি একটি অবৈধ castালাই হওয়ার কারণে আমি সংকলন সমস্যা পেয়েছি।


আপনি যদি var x = চেষ্টা করেন (তালিকা তালিকার কাস্টমঅবজেক্ট গ্রুপে কাস্টমবজেক্ট ও থেকে o.PropertyName টি টিতে টি নির্বাচন করুন) .ToList ();
esastincy

44
এটির জন্য ডিজাইন করা টোল-লকআপ ব্যবহার না করে আপনার এটি করার প্রয়োজনের কোনও কারণ আছে কি?
জন স্কিটি

1
জন, আপনি কী দয়া করে এই পরিস্থিতিতে টুকলুকআপ কাজ করে তার একটি উদাহরণ পোস্ট করতে পারেন? আমি এই লিনকিউ পদ্ধতির সাথে পরিচিত নই।
আতারি 2600

8
@ জোনস্কিট আপনি দুর্দান্ত! (আমি বোঝাতে চাইছি যে প্রত্যেকে এটি ইতিমধ্যে জানত তবে এখনও রয়েছে) এখন আমি জানি!
নিমিনেম

1
কেবল সম্পূর্ণতার জন্য, var"বেনামি" প্রকারটি ব্যবহার করছে না, এটি একটি "অন্তর্নিহিত" প্রকার ব্যবহার করছে। বেনামে প্রকারগুলি হ'ল নির্মাণ পরিচালনা করতে সংকলক দ্বারা নির্মিত নতুন ক্লাস new { thing = "stuff" };। অন্তর্নিহিত প্রকারগুলি বিদ্যমান শ্রেণিগুলি, varভেরিয়েবলটি অবিলম্বে নির্ধারিত হওয়ার সময় তাদের রেফারেন্স করার কেবল একটি সহজ উপায়, ভেরিয়েবল টাইপটি তাকে অর্পণ করা অবজেক্টের ধরণ থেকে অনুমান করা যায়। আপনি এমনকি কোনও বেনামে উল্লেখ করে একটি পরিবর্তনশীল স্পষ্টভাবে টাইপ করতে পারেন, যেমন:var a = new { thing = "stuff" };
মাইকেল ব্ল্যাকবার্ন

উত্তর:


350
Dictionary<string, List<CustomObject>> myDictionary = ListOfCustomObjects
    .GroupBy(o => o.PropertyName)
    .ToDictionary(g => g.Key, g => g.ToList());

6
তালিকার মান হিসাবে 'কাস্টমবজেক্ট' থেকে কোনও সম্পত্তি প্রয়োজন না হলে (এই উত্তরে দেখানো হয়নি) টলকআপের প্রস্তাব দেওয়া প্রশ্নের জোন স্কিটের মন্তব্যে তার কোডিলনেস পরীক্ষা করা উপযুক্ত।
শান

3
যদি কোনও অনিবার্য ফলাফল পছন্দ হয় তবে এটি করার উপায়। ToLookup অপরিবর্তনীয়।
অমিত

1
আমার 2 সেন্ট (কেবলমাত্র কারণ এটি আমাকে এক ঘন্টা লড়াই করে রেখেছে :)): কোনও সম্পত্তি দ্বারা দলবদ্ধ করার সময়, সম্পত্তিটির কোনও মূল্য আছে কিনা তা নিশ্চিত করুন! অন্যথায় টোডিক্ট-পদ্ধতিটি উত্পন্ন কীটি ব্যর্থ করে (স্ট্রিং-প্রোপার্টিগুলির জন্য কমপক্ষে ...) :)
ডিবিএ

.GroupBy(o => o.PropertyName).ToDictionary(g => g.Key, g => g.ToList())এটি এক্সটেনশন লিনক লাইব্রেরির অংশ হতে পারে। সুতরাং আমাদের কেবল তা করতে হবে.ToDictionary(o=>o.PropertyName)
জয়দার

3
শুধু প্রতিস্থাপন করুন: @Jaider সেখানে ইতিমধ্যে এই ধরনের কার্যকারিতা হয় ToDictionaryসঙ্গে ToLookup
রবার্ট সিনোরাদজকি

19

আমি @ মিশেল ব্ল্যাকবার্ন সম্পর্কে মন্তব্য করতে পারি না, তবে আমি অনুমান করি যে আপনি ডাউনটা পেয়েছেন কারণ এই ক্ষেত্রে গ্রুপবাই প্রয়োজনীয় নয়।

এটি ব্যবহার করুন:

var lookupOfCustomObjects = listOfCustomObjects.ToLookup(o=>o.PropertyName);
var listWithAllCustomObjectsWithPropertyName = lookupOfCustomObjects[propertyName]

অতিরিক্তভাবে, আমি গ্রুপবি ()। টুডিয়েরো () ব্যবহার করার চেয়ে এই পদ্ধতিটি আরও ভালভাবে দেখেছি।


আমি একটি লিখিত লিপি রচনা করছিলাম, সবচেয়ে ভাল পদ্ধতিতে প্রশ্নের জবাব দিচ্ছিলাম না।
মাইকেল ব্ল্যাকবার্ন

1

@ Atari2600 এর জন্য, উত্তরটি ল্যাম্বডা সিনট্যাক্সে টু লুকআপ ব্যবহার করার মতো দেখায়:

var x = listOfCustomObjects
    .GroupBy(o => o.PropertyName)
    .ToLookup(customObject => customObject);

মূলত, এটি আইগ্রুপিং নেয় এবং এটি আপনার জন্য তালিকার একটি অভিধানে রূপায়িত করে, যা সম্পত্তি হিসাবে নাম হিসাবে মান হিসাবে থাকে।


কেন ডাউনটা? এটি কি সঠিক / প্রশ্নের উত্তর দিচ্ছে না?
মাইকেল ব্ল্যাকবার্ন

1
আপনি যদি এটি মিস করেন তবে @ রূদভেকে তার উত্তরে উল্লেখ করেছেন যে তিনি ডাউনটাতে সন্দেহ করছেন কারণ গ্রুপবাই অপ্রয়োজনীয়। ToLookupএকটি ওভারলোড রয়েছে যা কাজটি শেষ করবে।
জেফ বি

আমি প্রতিক্রিয়া মিস করি, আমাকে ট্যাগ করার জন্য ধন্যবাদ। বোঝা যাচ্ছে, গ্রুপিং সিনট্যাক্টিকালি অপ্রয়োজনীয়, আমি কোয়েরি সিনট্যাক্স থেকে পদ্ধতি সিনট্যাক্স পরিষ্কারে রূপান্তর করতে কেবল এটিকে রেখে যাচ্ছিলাম।
মাইকেল ব্ল্যাকবার্ন

গ্রুপবাই (মাত্র একটি প্যারামিটার সহ ওভারলোড) একটি অনুমিত <আইগ্রুপিং <টিকি, টিসোর্স >> প্রদান করে তারপরে টুকলুকআপ তারপর এটি একটি জটিল জটিল আকারে রূপান্তরিত করে যা এমনকি কোনও আইডিয়েরিয়ার <টিকি, আইলিস্ট <টি উত্স>> এর সাথে সাদৃশ্য নয় just সঠিক টাইপ দেয়।
xtofs

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