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