Language Integrated Query (Dil’e Entegre Edilmiş Sorgulama), kısaca LINQ, .NET Framework 3.5 sürümüyle birlikte tanımlı gelen bir özelliktir. .NET Framework 3.5 sürümünden önce .NET Framework 2.0' da eklenti paketleriyle birlikte kullanılabiliyordu.
Bu teknoloji sayesinde veritabanı ile kullanılan programlama dili arasında kodsal bir bütünlük sağlanmıştır, böylece veritabanının programlama dili kullanılarak sorgulanabilmesi sağlanmış, veritabanı kodlarla yönetilebilir hale gelmiştir. LINQ teknolojisi kullanılmadığı durumda veri katmanı ve uygulama katmanı birbirinden bağımsız durumdadır, uygulama katmanında veritabanından bir veri elde edebilmek için veri katmanıyla iletişim için "connection string"(bağlantı katarları)' ler kullanılır ve bu şekilde bu iki farklı yapı arasında bir köprü oluşturulur. Sonunda elde edilen veriler programlama dilinde alışılmış olunan nesneler şeklinde değildir, doğru verileri elde edebilmek için bu sonuçları programa uygun hale getirmek gerekir, bu da fazladan birtakım işlemler yapmak anlamına gelmektedir.
LINQ teknolojisiyle birlikte veriler nesneler haline dönüşmüştür. Linq teknolojisinde sorgu uygulama katmanında yazıldığında ilk olarak numaralandırılır, yazım hataları varsa onlar sorgulanır. Buradan anlaşılacağı üzere sorgu ifadesi oluşturulduğu an çalışmıyordur, numaralandırılan sorgu ifadesi linq to sql yapısı aracılığıyla çalıştırılır. Çalıştırılan bu sorguyla birlikte sql sunucusundan veriler satırlar halinde aktarılır. Linq to Sql yapısı bu satırları nesneler haline getirir. Bu şekilde veriler nesneler halinde aktarılmış olur. Linq to sql yapısında verilerin nesneler haline gelmesini sağlayan temel yapı dbml (database markup language) sınıfıdır. dbml sınıfıyla projeye bağlanan veritabanında linq teknolojisi kullanılarak sorgulama yapılabilir. dbml ile DataContext (Veri Bağlama) sınıfı oluşturulur, bu kısım "Framework" e girişi sağlar, giriş yapıldıktan sonra "intellisense", kod tamamlama gibi platformun özelliklerinden faydalanılabilir. Veritabanı tarafında yer alan tablo, saklı yordam (stored procedure), görünüm (view), fonksiyon gibi unsurlar proje çerçevesinde nesne olarak yer alabilir, bu da linq kurallarının sql üzerinde gerçeklenmesini sağlar. Burada oluşturulan bu nesneler veritabanından çekilen sonuçları üzerlerinde saklayabilirler, alt yapıda constructor (yapıcı)' larla bu nesneler oluşturulmuştur.
Uygulama:
- Linq teknolojisini kullanabilmek için Solution Explorer (Çözüm Gezgini)' dan proje üzerine sağ tıklanır ve Add (Ekle)-> New Item (Yeni Nesne) seçilir.
- Gelen pencerede LINQ to SQL Classes üzerine tıklanır ve veritabanına uygun olarak bir isim verilir.
- Daha sonra açılan pencere üzerinden Server Explorer (Sunucu Gezgini)' a tıklanarak sunucuyla bağlantı kurulur ve sunucu bağlantıları sağ kısımda görüldüğü üzere belirlidir. Bu kısımdan ortadaki boş alana istenilen tablolar sürüklenip bırakılır, ilişkisel veritabanları arasındaki bağlantı otomatik olarak oluşturulur. Ayrıca sağ tarafta boş kalan alanda ise eğer bir metod ya da saklı yordam eklenmişse listelenir.
- Oluşan .dbml dosyasına bağlı olan kod dosyası (.cs) incelendiğinde arka tarafta gerçeklenen kodlara ulaşılacaktır, LINQ kullanılarak yeni bir tablo oluşturmak için bu kodlar gerçeklenmelidir. Kod kısmındaki en önemli sınıf DataContext sınıfıdır, "framework" e giriş bu sınıf aracılığıyla sağlanır, bu sınıfla veritabanı programatik ortama bağlanmış olur. Ayrıca referans kısımlarına dikkat edildiğinde System.Data.Linq ve System.Data.Linq.Mapping ek olarak gelmiştir, yeni tablo oluşturulurken bu referanslar eklenmelidir.
- Sadece select ifadesiyle gerçeklenen bir işlem ve sonuçları şu şekildedir:
Dbml' le oluşan "NorthwindDataContext" le yeni bir veritabanı bağlantısı oluşturulur. Sorgu kısmına bakıldığında SQL' de gerçeklenen ifadelerle büyük oranda benzer olduğu görülmektedir. Dikkat edilecek olunursa "Order" ve "OrderDetail" olmak üzere iki farklı tablo bulunmaktadır, bu tablolardan "OrderDetail" sorgulanmaktadır ancak "p.Order.CustomerID" ifadesiyle diğer tablodaki bir veri üzerinden kısıtlama yapılmaktadır, ilişkisel tablolar arasındaki geçiş oldukça kolay bir şekilde gerçeklenmektedir. Sonuç olarak tüm sütunların gelmemesi için"select" den sonraki "new" ifadesiyle yeni bir şablon oluşturulmuştur. Aynı şekilde tabloya yeni veriler eklenebilir, tablodan veri silinebilir ve tablo üzerinde güncelleme yapılabilir. LINQ veritabanı üzerinde gerçekleştirilebilen bütün uygulamalar için destek sağlamaktadır. Select ifadesinin sonra yazılmasının sebebi ise çoğu programcının sorgu yazarken diğer ifadeleri yazdıktan sonra o kısmı eklemesidir, bu şekilde programcının işi kolaylaştırılmaya çalışılmıştır.