Linq ile işe yarar birşeyler…

Posted: 05 Mayıs 2011 in .NET

C#
3.5 ile gelen yeni özelliklerden birtaneside Linq ve Lambda bi kaç gün önce yeni projemde
kullanmaya başladığım bir kaç özelliğinden işe yarar bulduğum yanlarını yazıyım istedim.

Bir formunuz(Form) ve içinde birden çok buton var ve siz sadece buton yazısı(Button.Text)
içinde Ekle geçenleri bulmak istiyorsunuz lambda olmadan bunu şu şekilde yapabiliyorduk
:

List<Button>
bulunanlar = new List<Button>();

foreach (Control
c in this.Controls)

{

if (c is Button)

{

Button
btn = (Button)c;

if(btn.Text.Contains(“Ekle”))

bulunanlar.Add(btn);

}

}

Linq
ile gelen extension methodları kullanarak şu şekilde daha az yazarak yapabiliyoruz..
var linqIleBulunanlar = from
btn in this.Controls.OfType<Button>()
where btn.Text.Contains(“Ekle”)
select btn;
List<Button>
bulunanlar = linqIleBulunanlar.ToList();

Burada
var değişken tipi Object gibi herşeyi barındırabilen bir veritipi herhangi birşeye
dönüşüm yapmadan direk methodlarını ve propertylerini kullanabiliyoruz aslında
burdaki var IEnumerable<Button> tipine otomatik olarak dönüşüyor ve böylece ToList()
methodunu Object de olduğu gibi dönüşüm yapmadan kullanabiliyoruz.

aynı işlemi
var yerine Object kullanarakta şu şekilde yapabilirdik :

object linqIleBulunanlar = from
btn in this.Controls.OfType<Button>()
where btn.Text.Contains(“Ekle”)
select btn;

List<Button>
bulunanlar = ((IEnumerable<Button>)linqIleBulunanlar).ToList();

Ancak
bu şekilde yaptığımızda bazı durumlarda Object not cast… hatası alabiliyoruz. var
tipi bizi bu dönüşümlerden(cast) den kurtaran bir c sharp 3.5 yeniliği. Şuan için
bildiğim tek eksi yönü object gibi methodlara parametre olarak gönderilemiyor ki biraz
düşündüğümüzde aslında mantıklı.

var
ın ne olduğunu anladıktan sonra gelelim Linq sorgusuna sorguya “from” ile başlıyoruz
ve sonrasında sorgu içerisinde kullanacağımız değişken ismini yazıyoruz(btn) ardından
“in” yazıp içinde arama yapacağımız List Array yada IEnumerable ı yazıyoruz. Burda
kullandığımız list this.Controls.OfType<Button>() , this.Controls tanıdık gelmesine
rağmen sonundaki OfType<Button>() methoduna çoğumuz yabancıyız bu yine C# 3.5
ile gelen Extention Method kavramıyla yapılmış bir ek method ve yaptığı işlem çalıştığı
list içinde generic parametre ile aldığı tipteki elemanları döndüren bir method burdaki
kullanma amacımız Formdaki kontroller arasından sadece Button olanların arasında arama
yapmak (içinde “Ekle” geçen bir label in gelmesini istemiyoruz) daha sonra “where”
yazıp ardından arama kriterimizi giriyoruz bu kriter bildiğimiz if içinde yazdığımız
kriterler gibi bool döndürmesi gerekiyor btn.Text.Contains(”Ekle”) ile Text property
sinin içinde “Ekle” geçmesi gerektiğini belirtiyoruz ve son olarak “select” ardından
listesini döndürmek istediğimiz şeyi yazıyoruz biz burda Button ları döndürmek istediğimiz
için btn yazdık ancak sadece Buttonların Name ini döndüren bir string dizisi istiyorsak
btn.Name de yazabilirdik.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s