Temel C# bilgileri ile ilgili eksiklerimizi tamamlayıp LINQ'e de giriş yaptıktan sonra nesnelerden oluşan koleksiyonlar içinde LINQ'i nasıl kullanabileceğimizi inceleyebiliriz.
Kişi sınıfının ve Cinsiyet enum'unun diyagramını görsel olması açısından paylaşıyorum.
Şimdi de class kodlarını yazalım:
class Kisi
{
private string ad;
private int boy;
private int kilo;
private Cinsiyet cinsiyet;
public string Ad
{
get { return this.ad; }
set { this.ad = value; }
}
public int Boy
{
get { return this.boy; }
set { this.boy = value; }
}
public int Kilo
{
get { return this.kilo; }
set { this.kilo = value; }
}
public Cinsiyet Cinsiyet { get; set; }
public Kisi(string ad, int boy, int kilo, Cinsiyet cinsiyet)
{
this.Ad = ad;
this.Boy = boy;
this.Kilo = kilo;
this.Cinsiyet = cinsiyet;
}
}
enum Cinsiyet
{
Erkek,
Kadın
}
Kişi sınıfından üretilen bir çok nesne olabilir. Bu kişilerin oluşturduğu koleksiyona kisiler adını vererek 6 kişi nesnesi ekliyorum:
List<Kisi> kisiler = new List<Kisi>()
{
new Kisi("Özge", 170, 60, Cinsiyet.Kadın ),
new Kisi("Ziya", 160, 60, Cinsiyet.Erkek ),
new Kisi("Meral", 175, 80, Cinsiyet.Kadın ),
new Kisi("Burhan", 190, 120, Cinsiyet.Erkek ),
new Kisi("Batuhan", 155, 70, Cinsiyet.Erkek ),
new Kisi("Cengiz", 185, 90, Cinsiyet.Erkek )
};
Örnek 1: İsmi 4 harfli olan kişileri bulmak amacıyla bir LINQ sorgusu yazın ve çıktı alın. Çıktıda da kişilerin isim, boy ve cinsiyet bilgileri yer alsın.
var dortHarfliIsimliKisiler = from k in kisiler
where k.Ad.Length.Equals(4)
orderby k.Boy descending
select k;
foreach (var kisi in dortHarfliIsimliKisiler)
{
Console.Out.WriteLine("Ad: "+kisi.Ad+" Boyu: "+kisi.Boy+" Cinsiyeti:"+kisi.Cinsiyet);
}
//Ad: Özge Boyu: 170 Cinsiyeti: Kadin
//Ad: Ziya Boyu: 160 Cinsiyeti: Erkek
Örnek 2: ismi 4 harfli olan kişileri boy uzunluklarına göre azalan sırada listeleyin.
var dortHarfliIsimliKisiler = from k in kisiler
where k.Ad.Length.Equals(4)
orderby k.Boy descending
select k;
foreach (var kisi in dortHarfliIsimliKisiler)
{
Console.Out.WriteLine("Ad: "+kisi.Ad+" Boyu: "+kisi.Boy+" Cinsiyeti:"+kisi.Cinsiyet);
}
//Ad: Özge Boyu: 170 Cinsiyeti: Kadin
//Ad: Ziya Boyu: 160 Cinsiyeti: Erkek
Örnek 3: İsimlerinin karakter sayısı 10'dan az olan kişileri önce kilolarına göre azalan sırada listeleyin. Kiloları aynı olan kişileri de isimlerine göre artan sırada listeleyin.
var kisilerSirali = from k in kisiler
where k.Ad.Length < 10
orderby k.Kilo descending, k.Ad
select k;
foreach (var kisi in kisilerSirali)
{
Console.Out.WriteLine("Ad: " + kisi.Ad + " Boyu: " + kisi.Kilo + " Cinsiyeti:" + kisi.Cinsiyet);
}
/*
Ad: Burhan Boyu: 120 Cinsiyeti:Erkek
Ad: Cengiz Boyu: 90 Cinsiyeti:Erkek
Ad: Meral Boyu: 80 Cinsiyeti:Kadin
Ad: Batuhan Boyu: 70 Cinsiyeti:Erkek
Ad: Özge Boyu: 60 Cinsiyeti:Kadin
Ad: Ziya Boyu: 60 Cinsiyeti:Erkek
*/