LinQ nedir? IQueryable Kullanımı, HttpResponseMessage

Language Integrated Query demektir. Yani Dil ile bütünleşmiş dil anlamına gelmektedir. Normalde sql sorgusu yazarken unicode şeklinde yazıyoruz. Yani aşağıdaki gibi

SqlDataAdapter arama = new SqlDataAdapter("select * from ogrenciler where TC like'%" + txtTCara.Text + "%' and ad like '%" + txtAdAra.Text + "%' and soyad like '%" + txtSoyadAra.Text + "%'", bag);
                DataTable dt = new DataTable();
                arama.Fill(dt);
                dt.Dispose();

Yukarıdaki yazdığım basit bir Sql arama sorgusudur. Gördüğünüz gibi bütün sql sorguları tırnak işaretleri arasına yazılı durumda. Linq ise bu şekilde değilde direk olarak C# kodu şeklinde yazılır. Linq normal sql sorgularından çok daha hızlı çalışmaktadır.

Örnek linq kodları

var array = new[] { 5, 8, 4, 1, 2, 9 };
var filtered =
array.Where(value => value > 4)
.Select(value => value);
foreach (var item in filtered)
{
Console.WriteLine(item);
} // bize 4'ten büyük olanları dönecektir.


int yastoplami= Data.Ogrencilertbls.Where(x => x.Sinif=="A").Sum(x => x.Yas); 
// A sınıfında olanların yaşlarının toplamını verecektir

Şimdi 2 parametre alan bir api üzerinde hem IQueryable’ı hem de linq sorgusunu inceleyelim.

public HttpResponseMessage Get(string gender = "all", int? top = 0)
         {
             IQueryable query = db.Employees;
             // query'e select * from oluşturuldu ama gidip çekmiyor kriteri verdikten sonra kriterime göre gidip çekicek
             gender = gender.ToLower();
             switch (gender)
             {
                 case "all":
                     break;
                 case "male":
                 case "female":
                     query = query.Where(e => e.Gender.ToLower() == gender);
                     break;
                 default:
                     return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "geçersiz değer");
             }
             if (top > 0)
             {
                 query = query.Take(top.Value); //nullable olduğundan dolayı .value diyerek değeri alınır.
             }
             return Request.CreateResponse(HttpStatusCode.OK, query.ToList()); //ToList burada olduğundan sorgumu atmaya burada gidiyor.
} 
// Yani aslında ben query içinde sürekli kriterlerimi veriyorum ama her seferinde istek atıp gelmiyor en son Tolist dediğim yerde son haliyle istek atıp geliyor.

Daha kapsamlı örnekler için:
https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/working-with-linq

Bir cevap yazın