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
1 2 3 4 |
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ı
1 2 3 4 5 6 7 8 9 10 11 12 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
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