LINQ Sorgusu içinde IF kullanmak ya da IF kullanmaya gerek yok mu?

Merhaba,

LINQ ile çalışırken zaman zaman karmaşık sorgular oluşturmamız gerekebiliyor ve doğrudan halledemeyeceğimiz durumlar oluşabiliyor.
Bugün bu durumlardan biri başıma geldi basit bir örnekle anlatmaya çalışacağım.

Source adında bir tablomuz olduğunu varsayalım. Bu tablo içinde OID,Name,startdate,enddate ve SourceType adında 2 alanımız olsun.
Bir Dropdown koyalım ve içine bütün source Typelarını koyalım. ( 3 tanse SourceType olduğunu varsayalım). bir de name'i yazabileceğimiz textboxumuz olsun(txtSearchString).
Bir gridview içinde Tipi dropdownda seçilmiş Tipe uyan bütün sourceları göstermeye çalışalım.
Bunu yapmak için aşağıdakine benzer bir sorgu hazırlamamız gerekir.

var sourceData = from s in dc.Sources
where s.SourceTypeID == int.Parse(ddlSourceType.SelectedValue)
&& s.Name.Contains(txtSearchString.Text)
orderby s.Name
select new
{
OID = s.OID,
SourceName = s.Name,
StartDate = s.StartDateSubscription,
EndDate = s.EndDateSubscription
};

Peki Dropdown'a 1 kayıt daha ekleyelim ismi "Hepsi" olsun ve değerini "0" yapalım.
Şimdi dropdownda "Hepsi" seçildiğinde Hiç sourceType alanına bakmadan sadece source ismi txtSearchString'e yazılan değerle uyuşan kayıtları getirmeye çalışalım.

Ne yapmamız lazım? evet evet buldum!! Hemen sorgunun başına bir IF koyalım ve sourceData sorgusundan bir tane daha yaratalım ama bu sefer içine sourceType alanına baktırmayalım else durumuna da yazarız yine SourceType alanına bakandan:

var sourceData="";

IF (ddlSourceType.SelectedValue == "0")
{

sourceData = from s in dc.Sources
where s.Name.Contains(txtSearchString.Text)
orderby s.Name
select new
{
OID = s.OID,
SourceName = s.Name,
StartDate = s.StartDateSubscription,
EndDate = s.EndDateSubscription
};
}
else
{
sourceData = from s in dc.Sources
where s.SourceTypeID == int.Parse(ddlSourceType.SelectedValue)
&& s.Name.Contains(txtSearchString.Text)
orderby s.Name
select new
{
OID = s.OID,
SourceName = s.Name,
StartDate = s.StartDateSubscription,
EndDate = s.EndDateSubscription
};

}

Evet evet istediğimiz yaptık. Ne olacak kopyalarız yapıştırırız her seferinde, taş attık da kolumuz mu yoruldu dimi?
HAYIR yorulmadı ama bu kadar uğraşmadan da bunu yapabilirdik.

Amacımız ne? Eğer dropdown'un değeri "0" ise SourceTypeID'ye bakmadan ne varsa getirmek.
şöyle bir sorguyla bunu halledebiliriz:

var
sourceData = from s in dc.Sources
where
(s.SourceTypeID == int.Parse(ddlSourceType.SelectedValue) || ddlSourceType.SelectedValue=="0")
&& s.Name.Contains(txtSearchString.Text)
orderby s.Name
select new
{
OID = s.OID,
SourceName = s.Name,
StartDate = s.StartDateSubscription,
EndDate = s.EndDateSubscription
};

where içinde sourceType ı kontrol ettiğimiz sözcüğün başına sonuna parantez ekleyip parantezin içine ||(or) yazıp yanına da condition'u yazıyoruz.

Yine dolandırıp dolandıp anlattım galiba. Umarım işinizi görür ve umarım yazıyı toparlamak için vakit bulabilirim...

Comments (6) -

Güzel bir yazı olmuş
devamını bekliyoruz.Teşekkürler

Yazınız için teşekkürler.

bilgiler için teşekkür ederim

teşekkürler bilgi için

Bilgiler için çok teşekkürler, gerekli ve bilinmesi gereken bilgiler emeğine sağlık.

ıf kullanmak mı kullanmamak mı sorusunun en şeffaf şekildeki açıklaması için teşekkürler.

Add comment