Linq Group By Kullanımı

Posted by

Merhaba arkadaşlar, bu yazımda sizlere Linq Group By Kullanımı konusundan bahsedeceğim.

Uygulamalarımızı oluştururken gösterim yapacağımız ekranlar üzerinde bazı verileri gruplandırarak göstermek ya da gruplanmış veriler üzerinde işlemler yaptırmak isteyebiliriz. Örnek vermek gerekirse bir kişi listemiz var ve bu kişilere ait araç ya da araçlar var diyelim. Bu listemizi gruplandırarak gösterim sağlamak istiyoruz. “A” kişisine ait kaç araç olduğu, B kişisine ait kaç araç olduğu gibi… Bir diğer örnek ise Sınıflar var diyelim ve bu sınıflarda olan Öğrenciler var diyelim. İstiyoruz ki, A sınıfındaki öğrencilerin listesi, B sınıfındaki öğrencilerin listesi, C sınıfındaki öğrencilerin listesi gibi…

Şimdi örnek kod üzerinden group by işlemini nasıl sağlayabiliriz birlikte inceleyelim;

Öncelikle bir class’ımızı oluşturalım.

public class Person
{
   public int PersonId { get; set; }
   public string FirstName { get; set; }
   public string Car { get; set; }
}

Class’ımızı oluşturduktan sonra main metodu içerisinde örnek bir liste oluşturuyoruz.

var personCars = new List<Person>() {
                new Person { PersonId = 1,FirstName="Ali", Car = "Ferrari" },
                new Person { PersonId = 1,FirstName="Ali", Car = "Bmw" },
                new Person { PersonId = 2,FirstName="Can", Car = "Audi" }
            };

Örnek listemizi de oluşturduk artık grup işlemini sağlayabiliriz.

var results = personCars.GroupBy(
                p => p.PersonId,
                p => p.Car,
                (key, g) => new { PersonId = key, Cars = g.ToList() });

GroupBy metodumuzun içerisinde PersonId ve Car bilgisine göre bir gruplama işlemi yaptırmış oldu. Sonrasında ise geriye dönecek değerlerimizi oluşturmuş olduk. Burada da PersonId bilgisi ve bir Car listesi döndürmüş olduk. Son olarak ise ekrana yazdırma işlemlerimizi yapalım.

foreach (var item in results)
{
  string firstName = personCars.FirstOrDefault(x => x.PersonId == item.PersonId).FirstName;

  Console.WriteLine(firstName);

  foreach (var car in item.Cars)
  {
     Console.WriteLine(car);
  }

     Console.WriteLine("----------");
}

Foreach ile de gruplanmış veri üzerinde Person bilgisini yazdırdık ve bu Person’a ait araç listesini yazdırmış olduk.

Umarım faydalı olur.

Bir sonraki yazıda görüşmek üzere…

Leave a Reply

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir