LINQ Cheat Sheet
LINQ kod içerisinde SQL tarzı sorgular yapabilmemize olanak sağlayan bir teknolojidir.
Urun
nesnelerinin ve tamsayı değerlerinin yer aldığı iki farklı dizi üzerinde sorgulama işlemleri gerçekleştirilecektir.
public class Urun { public int Numara { get; set; } public string Ad { get; set; } public string Kategori { get; set; } public double Deger { get; set; } } var dizi = new[] { 2, 3, 7, 4, 5, 4, 9, 1, 3 }; var urunler = new[] { new Urun { Numara = 1, Ad = "Kalem", Kategori = "Kırtasiye", Deger = 3 }, new Urun { Numara = 2, Ad = "Elma", Kategori = "Manav", Deger = 4.2 } };
Süzme (Filter)
// Değeri 3 olan dizi elemanları alınıyor var sonuc = (from c in dizi where c == 3 select c); // 2 farklı kritere göre süzme var sonuc = (from c in urunler where c.Kategori == "Manav" && c.Deger > 1 select c); // Lambda Syntax var sonuc = urunler.Where(c => c.Ad == "Elma");
Yansıtma (Projection)
// Ürünlerin sadece belirli özellikleri listeleniyor. // Anonim tip geri döndürülüyor. var sonuc = (from c in urunler select new { c.Numara, c.Ad }); // Lambda Syntax var sonuc = urunler.Select(c => new { c.Numara, c.Ad });
Sıralama (Order)
// Dizi tersten sıralanıyor. var sonuc = (from c in dizi orderby c descending select c); // Birden fazla alana göre sıralanıyor. // İlk olarak değere, daha sonra kategoriye göre sıralanır. (sondan başa doğru) var sonuc = (from c in urunler orderby c.Kategori, c.Deger descending select c); // Lambda Syntax var sonuc = urunler.OrderByDescending(c => c.Deger).ThenBy(c => c.Kategori);
Birleştirme (Join)
// İki liste birleştirilerek, listelerin sadece belirli özellikleri alınıyor. var sonuc = (from c in dizi join urun in urunler on c equals urun.Numara select new { c, urun.Ad }); // Left join var sonuc = (from c in dizi join u1 in urunler on c equals u1.Numara into u2 from urun in u2.DefaultIfEmpty() select new { c, urun.Ad });
Gruplama (Group)
// Ürünler kategorilerine göre gruplanıyor. // Her bir kategori grubunda kaç adet ürün bulunduğu ve kategorinin toplam değeri listeleniyor. var sonuc = (from c in urunler group c by c.Kategori into g select new { Kategori = g.Key, Adet = g.Count(), ToplamDeger = g.Sum(k => k.Deger) }); // Birden fazla alana göre gruplama var sonuc = (from c in urunler group c by new { c.Ad, c.Kategori } into g select new { g.Key.Kategori, Adet = g.Count(), ToplamDeger = g.Sum(k => k.Deger) });