আইগ্রুপিংয়ে "মান" সম্পত্তি পান


141

আমার মতো একটি ডেটা স্ট্রাকচার আছে

public DespatchGroup(DateTime despatchDate, List<Products> products);

এবং আমি চেষ্টা করছি ...

var list = new List<DespatchGroup>();

foreach (var group in dc.GetDespatchedProducts().GroupBy(i => i.DespatchDate))
{
    // group.Values is not correct... how do I write this?
    list.Add(new DespatchGroup(group.Key, group.Values);
}

আমি IGroupingগ্রুপের মধ্যে ডেটা রেকর্ডে আসলে কীভাবে যাব তা দেখতে পাচ্ছি না বলে আমি স্পষ্টতই বুঝতে পারি না!


1
সম্পাদনা (Rev2) খুব গঠনমূলক ছিল না কারণ এটি কোনও উত্তর মিলছে না।
সানি প্যাটেল

উত্তর:


170

গোষ্ঠীটি প্রয়োগ করে IEnumerable<T>- সাধারণ ক্ষেত্রে, কেবলমাত্র কল foreachকরুন group। ইন এই ক্ষেত্রে, যেহেতু আপনি একটি প্রয়োজন List<T>:

list.Add(new DespatchGroup(group.Key, group.ToList());

সুতরাং মূলত যদি আমরা প্রশ্নের valueসারমর্মটি অনুসরণ করছি ToList()কেবল তুলনামূলকভাবে সেখানে কেবলমাত্র একটি মান বের করার বিরোধী হিসাবে একটি তালিকায় রূপান্তর করার জন্য সেখানে একটি ওভারহেডের অনেক বেশি রয়েছে
Coops

2
@ কোডবেলেন্ড আরও ওভারহেড আছে কারণ তারা একটি তালিকা চায়। যদি Valuesতারা কল্পনা করার মতো কোনও সম্পত্তি থাকে তবে তাদের করতে হবে group.Values.ToList()। বিপরীতভাবে যদি তারা তালিকার পরিবর্তে কোনও অনুমানযোগ্য গ্রহণ করে তবে new DespatchGroup(group.Key, group)তা কাজ করবে। ওভারহেড এর সংজ্ঞা থেকেDespachGroup আইগ্রুপিংয়ের কাজ করার পদ্ধতি থেকে নয় থেকে।
জন হান্না

35

কোনও Valuesসম্পত্তি বা অনুরূপ নেই কারণIGrouping<T> নিজেই হয়IEnumerable<T> মূল্যবোধের অনুক্রম। এই ক্ষেত্রে আপনাকে যা করতে হবে তা হ'ল সেই ক্রমটিকে একটি তালিকায় রূপান্তর করা:

list.Add(new DespatchGroup(group.Key, group.ToList());

6
আমরা একটি IEnumerable রূপান্তর করতে পারে আমরা ইচ্ছা: group.AsEnumerable()
মতিন উলহাক

22

যে কোনও নির্বাচিত গোষ্ঠীর জন্য, আপনি কল করতে পারেন

var selectedGroupValues=selectedGroup.SelectMany(x=>x);

2
ধন্যবাদ! .Selectযা আবার কোনও আইগ্রুপিং <> ফেরত দেবে তার বিপরীতে , .SelectManyগ্রেপড মানগুলির টাইপের একটি অগণিত ফিরিয়ে দেবে, যা আমি পরে ছিলাম।
ডি 4

আমি বলব কেবলমাত্র এটি ব্যবহার করুন যখন সেখানে (সম্ভাব্য) একাধিক গোষ্ঠী নির্বাচন করা হয়। (ওরফে IEnumerable<IGrouping<key,DespatchGroup>>) অন্যথায়, ব্যবহার করুন toList()বা কেবল এটিকে কাস্ট করুন IEnumerable<DespatchGroup>
আপেল আপেল

21

কেবল একটি সম্পর্কিত টিপ - যেহেতু, অন্যান্য উত্তরগুলি যেমন বলেছে, গ্রুপিংটি একটি প্রাথমিক মূল্যবান, যদি আপনার একটি নির্দিষ্ট সূচক অ্যাক্সেস করতে হয় তবে আপনি ব্যবহার করতে পারেন group.ElementAt(i)

এটি সম্ভবত অনেক লোকের কাছে সুস্পষ্ট তবে আশা করি এটি কয়েকজনকে সাহায্য করবে!

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