লিনক ব্যবহার করে অবজেক্টের তালিকাকে নতুন গ্রুপযুক্ত তালিকায় গ্রুপের জন্য ব্যবহার করা হচ্ছে


149

আমি জানি না যে লিন্কে এটি সম্ভব কিনা তবে এখানে ...

আমার একটি বিষয় রয়েছে:

public class User
{
  public int UserID { get; set; }
  public string UserName { get; set; }
  public int GroupID { get; set; }
}

আমি এমন একটি তালিকা ফিরিয়ে দিচ্ছি যা নিম্নলিখিতগুলির মতো দেখতে পারে:

List<User> userList = new List<User>();
userList.Add( new User { UserID = 1, UserName = "UserOne", GroupID = 1 } );
userList.Add( new User { UserID = 2, UserName = "UserTwo", GroupID = 1 } );
userList.Add( new User { UserID = 3, UserName = "UserThree", GroupID = 2 } );
userList.Add( new User { UserID = 4, UserName = "UserFour", GroupID = 1 } );
userList.Add( new User { UserID = 5, UserName = "UserFive", GroupID = 3 } );
userList.Add( new User { UserID = 6, UserName = "UserSix", GroupID = 3 } );

আমি উপরের তালিকায় একটি লিনক ক্যোয়ারী চালাতে সক্ষম হতে চাই যা গ্রুপআইডির দ্বারা সমস্ত ব্যবহারকারীকে গোষ্ঠীভুক্ত করে। সুতরাং আউটপুটটি এমন ব্যবহারকারী তালিকার তালিকায় থাকবে যাতে ব্যবহারকারী রয়েছে (যদি তা বোঝায়?) কিছুটা এইরকম:

GroupedUserList
    UserList
        UserID = 1, UserName = "UserOne", GroupID = 1
        UserID = 2, UserName = "UserTwo", GroupID = 1
        UserID = 4, UserName = "UserFour", GroupID = 1
    UserList
        UserID = 3, UserName = "UserThree", GroupID = 2
    UserList
        UserID = 5, UserName = "UserFive", GroupID = 3
        UserID = 6, UserName = "UserSix", GroupID = 3

আমি গ্রুপবাই লিনক ক্লজটি ব্যবহার করার চেষ্টা করেছি তবে এটি কীগুলির একটি তালিকা ফিরে আসে এবং এটি সঠিকভাবে গোষ্ঠীযুক্ত নয়:

var groupedCustomerList = userList.GroupBy( u => u.GroupID ).ToList();

উত্তর:


309
var groupedCustomerList = userList
    .GroupBy(u => u.GroupID)
    .Select(grp => grp.ToList())
    .ToList();

1
খুব সুন্দর, ঠিক আমার যা দরকার ছিল। ধন্যবাদ. এই অপরিহার্য উপায়ে suks।
ব্যবহারকারী 1841243

1
এটা ঠিক আছে? কারণ আমি এই উপায়ে ব্যবহার করেছি কাজ করে না। objModel.tblDonars.GroupBy (t => new {t.CreatedOn.Year, t.CreatedOn.Month, t.CreatedOn.Day})। (g => new {tblDonar = g.ToList ()}) টিউলিস্ট করুন। ); এটি কাজ করছে না ... আপনি কি সহায়তা করতে পারেন ....
রাজমোহন অ্যাঙ্গুচামি

আপনার সমাধানের সাথে এটি ঠিকঠাক কাজ করেছে তবে আমি মনে করি একটি গ্রুপে 8 টি পর্যন্ত মান রয়েছে এবং আমি কেবলমাত্র 6 টির সাথে প্রতিটি গ্রুপে প্রয়োজন চাই যাতে কীভাবে এটি করতে পারেন দয়া করে আমাকে জানান।
কোডারওয়িল

গ্রুপআইডির দ্বারা দলবদ্ধকরণের পরে আলাদাভাবে ব্যবহারকারীর নাম এবং ব্যবহারকারী আইডি তালিকাভুক্ত করার উপায় আছে কি? যেমন - ID "1", [1, 2, 4], ["ইউজারওন", "ইউজার টু", "ইউজারফর"] group গ্রুপ আইডি 1 এর জন্য
অজয়

1
বর্তমানে কোডটি কাজ করে না এবং যদি আপনি আগের ধরণের তালিকায় এটি চেষ্টা করার চেষ্টা করেন তবে একটি ত্রুটি ঘটায়। কারণ নির্বাচিত তালিকা প্রত্যাবর্তন একটি তালিকার ভিতরে একটি তালিকা তৈরি করে যা এখানে পছন্দসই আউটপুট নয়। যাদের সমস্যা আছে তাদের জন্য আমি পরামর্শ দিতে পারি: var groupedCustomerList = userList.GroupBy (u => u.GroupID) .Seलेक्ट (grp => grp.First ())। ToList ();
এলিয়াসেস

36

আপনার গ্রুপ স্টেটমেন্টটি গ্রুপ আইডির মাধ্যমে গ্রুপ করবে । উদাহরণস্বরূপ, আপনি যদি তারপর লিখেন:

foreach (var group in groupedCustomerList)
{
    Console.WriteLine("Group {0}", group.Key);
    foreach (var user in group)
    {
        Console.WriteLine("  {0}", user.UserName);
    }
}

এটা ঠিক কাজ করা উচিত। প্রতিটি গ্রুপ রয়েছে একটি কী, কিন্তু একটি রয়েছে IGrouping<TKey, TElement>যা একটি সংগ্রহ যে আপনার গোষ্ঠীর সদস্যদের পুনরুক্তি করতে দেয়। লি যেমন উল্লেখ করেছেন, আপনি যদি সত্যিই চান তবে আপনি প্রতিটি গ্রুপকে একটি তালিকায় রূপান্তর করতে পারবেন, তবে আপনি যদি উপরের কোড অনুসারে কেবল তাদের উপর পুনরাবৃত্তি করতে চলেছেন তবে তা করার কোনও আসল সুবিধা নেই।


4

টাইপ জন্য

public class KeyValue
{
    public string KeyCol { get; set; }
    public string ValueCol { get; set; }
}

সংগ্রহ

var wordList = new Model.DTO.KeyValue[] {
    new Model.DTO.KeyValue {KeyCol="key1", ValueCol="value1" },
    new Model.DTO.KeyValue {KeyCol="key2", ValueCol="value1" },
    new Model.DTO.KeyValue {KeyCol="key3", ValueCol="value2" },
    new Model.DTO.KeyValue {KeyCol="key4", ValueCol="value2" },
    new Model.DTO.KeyValue {KeyCol="key5", ValueCol="value3" },
    new Model.DTO.KeyValue {KeyCol="key6", ValueCol="value4" }
};

আমাদের লিঙ্ক কোয়েরি নীচের মত চেহারা

var query =from m in wordList group m.KeyCol by m.ValueCol into g
select new { Name = g.Key, KeyCols = g.ToList() };

বা নীচের মত তালিকার পরিবর্তে অ্যারের জন্য

var query =from m in wordList group m.KeyCol by m.ValueCol into g
select new { Name = g.Key, KeyCols = g.ToList().ToArray<string>() };

-1

এখনও একটি পুরানো, কিন্তু লি থেকে উত্তর আমাকে গ্রুপ দেয় নি K কেয়ার ফলস্বরূপ। অতএব, আমি তালিকাটি তালিকাবদ্ধ করার জন্য এবং একটি গোষ্ঠীযুক্ত তালিকাটি ফিরিয়ে দেওয়ার জন্য নিম্নলিখিত বিবৃতিটি ব্যবহার করছি:

public IOrderedEnumerable<IGrouping<string, User>> groupedCustomerList;

groupedCustomerList =
        from User in userList
        group User by User.GroupID into newGroup
        orderby newGroup.Key
        select newGroup;

প্রতিটি গ্রুপের এখন একটি কী রয়েছে তবে এতে একটি আইগ্রুপিং রয়েছে যা একটি সংগ্রহ যা আপনাকে গ্রুপের সদস্যদের উপর পুনরাবৃত্তি করতে দেয়।


এটি আপনার প্রশ্নের উত্তর দেয় , ওপির প্রশ্নের নয়। তারা কেবল তালিকার একটি তালিকা চায়। আপনার কোড এটি সরবরাহ করে না।
গার্ট আর্নল্ড

আমি এই সমাধানটি পোস্ট করেছি কারণ উপরোক্ত @Lie থেকে গৃহীত উত্তরগুলি পুনরাবৃত্ত হওয়ার সময় কাজ করে না কারণ এটি গ্রুপগত তালিকার মাধ্যমে পুনঃনির্মাণের সময় উপাদান সরবরাহ করে না যেমন group.key@ জনসকিটের উত্তরে দেখানো হয়েছে। আমার প্রদত্ত উত্তর পুনরাবৃত্তি করার সময় গ্রুপ.কি উপাদান সরবরাহ করে । সুতরাং এটি অন্যদের এই ফাঁদে পড়ার ক্ষেত্রে সহায়তা করতে পারে যা সরবরাহিত উত্তরগুলি উপরে বর্ণিত হিসাবে কাজ করে না। সুতরাং গ্রুপ.কি উপাদানটি গ্রহণযোগ্য উত্তরের মতো হওয়ার উপকারের সাথে তালিকাটি পাওয়ার আরও একটি উপায়। আপনার দাবি @ জার্টআরনল্ড বুঝতে পারি না। (। নেট কোর 3.0)
ডেটাপুল

আমি মনে করি পুরো প্রশ্নটি কী IGroupingতা বোঝার অভাবের উপর ভিত্তি করে । এজন্য নীচে ওপি তাদের নিজস্ব সঠিক কোডটি বাতিল করে দেয়, এটি আপনার কোডের সাথে মূলত অভিন্ন ical এ কারণেই তারা এমন একটি উত্তর গ্রহণ করে যা তারা যা বলে ঠিক তা সরবরাহ করে। তাদের যা প্রয়োজন তা হ'ল একটি ব্যাখ্যা, যা জেএস পর্যাপ্তরূপে সরবরাহ করেছিল।
গার্ট আর্নল্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.