گروه بندی با LINQ در C#

mohsen1 هفته قبل
ارسال شده در
csharp

فرض کنید یک کلاس به نام Person دارید که شامل PersonID و car است و یک لیست از این کلاس ایجاد می‌کنید که ممکن است شامل چندین نمونه با PersonID یکسان باشد، می‌توانید از LINQ برای گروه‌بندی بر اساس PersonID و گرفتن لیستی از همه ماشین‌هایی که هر شخص دارد استفاده کنید.

مثال با استفاده از سینتکس کوئری LINQ

      var results = from p in persons
              group p.car by p.PersonID into g
              select new Result 
              { 
                  PersonID = g.Key, 
                  cars = g.ToList() 
              };

    

در اینجا، persons بر اساس PersonID گروه‌بندی می‌شود و سپس یک شی جدید از نوع Result برای هر گروه ایجاد می‌شود که شامل PersonID و لیستی از ماشین‌ها (cars) است.

مثال با استفاده از متد GroupBy

شما همچنین می‌توانید از متد GroupBy لیست استفاده کنید:

      var results = persons.GroupBy(
    p => p.PersonID,
    p => p.car,
    (key, g) => new Result { PersonID = key, cars = g.ToList() }
);

    

در اینجا نیز ما با گروه‌بندی بر اساس PersonID، لیستی از ماشین‌ها را برای هر PersonID دریافت می‌کنیم.

نکات

نکته اول: استفاده از نوع بی نام

تعریف کلاس Result برای بازگرداندن نتایج الزامی نیست و می‌توانید نتیجه را بصورت نوع Anonymous یا بی نام بازگردانید. به عنوان مثال، اگر بخواهید نام شخص را نیز اضافه کنید، می‌توانید به صورت زیر عمل کنید:

      var results = from p in persons
              group p by p.PersonID into g
              select new 
              {
                  PersonID = g.Key,
                  Cars = g.ToList(),
                  Name = g.Select(x => x.Name).FirstOrDefault() // مثال برای اضافه کردن نام
              };

    

نکته دوم: استفاده از LookUp

همچنین، می توانید از قابلیت Lookup به جای گروه بندی استفاده کنید:

      var carsByPersonId = persons.ToLookup(p => p.PersonID, p => p.car);

    

در این صورت می‌توانید ماشین‌ها را برای هر PersonID به راحتی دریافت کنید.

.

رای
0
ارسال نظر
مرتب سازی:
اولین نفری باشید که نظر می دهید!