Generic Olmayan Tiplere LINQ ile Sorgu Yazmak

LINQ ile hayatimiz bir nebze daha kolaylasti ve artik bir çok nesneye program içerisinde sorgu yazar olduk ama benim gibi LINQ severler bilirler ki LINQ IEnumerable arayüzüne uygun generic koleksiyonlara uygulanabilirler. Generic Siniflarda .NET 2.0 ile hayatimiza girdigi için IEnumerable arayüzünü desteklemeyen siniflar da mevcut. Mesela ARRAYLIST sinifi bunlardan biri!

Bu yazimda Generic olmayan siniflara LINQ ile müdehale edebilme yani sorgu yazma yöntemi gelistirelim. Nasil mi? Ufak bir hile ile…

Simdi ise koyulalim…

1.ADIM: Bir adet Windows Form uygulamasi açalim.

2.ADIM: Projenize bir adet Class ekleyiniz ve ismini isimler.cs birakiniz. Sinifimizin içerisine asagidaki kodlari ekleyiniz.

class isimler
{
public string isim { get; set; }
public string Soyisim { get; set; }
}

Burada isim ve Sotisim adli iki adet özellik yazdik.

3.ADIM: Formumuzun LOAD eventine asagidaki kodu yazalim.

ArrayList DiziListesi = new ArrayList();
private void Form1_Load(object sender, EventArgs e)
{
DiziListesi.Add(new isimler {isim=”Engin”,Soyisim=”Demirog”});
DiziListesi.Add(new isimler {isim=”Ulas”,Soyisim=”Demirog”});
DiziListesi.Add(new isimler {isim=”Senay”,Soyisim=”Demirog”});
DiziListesi.Add(new isimler {isim=”Gözde”,Soyisim=”Demirog”});
DiziListesi.Add(new isimler {isim=”Nafiye”,Soyisim=”Demirog” });
}

Burada Global satirda tanimladigimiz ArrayList tipindeki DiziListesi degiskenimize isimler classindan degerler gönderdik.
4.ADIM: Formunuza bir adet Button kontrolü yerlestiriniz ve Click eventine,

private void button1_Click(object sender, EventArgs e)
{
var sonuc = from isimler Bilgiler in DiziListesi

where Bilgiler.isim != “Engin”
select Bilgiler;
foreach (isimler eleman in sonuc)
{
MessageBox.Show(eleman.isim);
}
}

Burada (from isimler Bilgiler in DiziListesi) diyerek ufak bir hile ile DiziListesinin her bir elemanina isimler sinifi özellikleri kazandirdik. Artik Sonucumuz Foreach ile gezilmeye uygun.

Diger yazilarimda görüsmek üzere…