Dil Tümleşik Sorgusu (LINQ) (C#)

Language-Integrated Sorgusu (LINQ), sorgu özelliklerinin doğrudan C# diliyle tümleştirilmesine dayalı bir dizi teknolojinin adıdır. Geleneksel olarak, verilerle yapılan sorgular derleme zamanında veya IntelliSense desteğinde tür denetimi yapılmadan basit dizeler olarak ifade edilir. Ayrıca, her veri kaynağı türü için farklı bir sorgu dili öğrenmeniz gerekir: SQL veritabanları, XML belgeleri, çeşitli Web hizmetleri vb. LINQ ile sorgu sınıflar, yöntemler, olaylar gibi birinci sınıf bir dil yapısıdır. Dil anahtar sözcüklerini ve tanıdık işleçleri kullanarak kesin olarak yazılan nesne koleksiyonlarına yönelik sorgular yazarsınız. LINQ teknoloji ailesi nesneler (LINQ to Objects), ilişkisel veritabanları (LINQ to SQL) ve XML (LINQ to XML) için tutarlı bir sorgu deneyimi sağlar.

Sorgu yazan bir geliştirici için LINQ'in en görünür "dille tümleştirilmiş" bölümü sorgu ifadesidir. Sorgu ifadeleri bildirim temelli bir sorgu söz diziminde yazılır. Sorgu söz dizimini kullanarak, veri kaynakları üzerinde en az kodla filtreleme, sıralama ve gruplandırma işlemleri gerçekleştirebilirsiniz. SQL veritabanlarındaki, ADO.NET Veri Kümelerindeki, XML belgeleriyle akışlarındaki ve .NET koleksiyonlarındaki verileri sorgulamak ve dönüştürmek için aynı temel sorgu ifadesi desenlerini kullanırsınız.

SQL Server veritabanları, XML belgeleri, ADO.NET Veri Kümeleri ve veya genel IEnumerable<T> arabirimi destekleyen IEnumerable nesneler koleksiyonu için C# dilinde LINQ sorguları yazabilirsiniz. LINQ desteği, birçok Web hizmeti ve diğer veritabanı uygulamaları için üçüncü taraflar tarafından da sağlanır.

Aşağıdaki örnekte sorgu işleminin tamamı gösterilmektedir. Tam işlem bir veri kaynağı oluşturmayı, sorgu ifadesini tanımlamayı ve sorguyu bir foreach deyimde yürütmeyi içerir.

// Specify the data source.
int[] scores = { 97, 92, 81, 60 };

// Define the query expression.
IEnumerable<int> scoreQuery =
    from score in scores
    where score > 80
    select score;

// Execute the query.
foreach (int i in scoreQuery)
{
    Console.Write(i + " ");
}

// Output: 97 92 81

Visual Studio aşağıdaki çizimde, hem C# hem de tam tür denetimi ve IntelliSense desteğiyle Visual Basic SQL Server veritabanında kısmen tamamlanmış bir LINQ sorgusu gösterilmektedir:

Diagram that shows a LINQ query with Intellisense.

Sorgu ifadelerine genel bakış

  • Sorgu ifadeleri, LINQ özellikli herhangi bir veri kaynağından verileri sorgulamak ve dönüştürmek için kullanılabilir. Örneğin, tek bir sorgu SQL veritabanından veri alabilir ve çıkış olarak bir XML akışı oluşturabilir.
  • Çok sayıda tanıdık C# dil yapısı kullandığından sorgu ifadelerini kavramak kolaydır.
  • Çoğu durumda derleyici çıkarabildiğinden türü açıkça sağlamanız gerekmese de, sorgu ifadesindeki değişkenlerin tümü kesin olarak yazılmıştır. Daha fazla bilgi için bkz. LINQ sorgu işlemlerinde tür ilişkileri.
  • Sorgu değişkeni üzerinde, örneğin bir foreach deyimde yinelenene kadar sorgu yürütülür. Daha fazla bilgi için bkz. LINQ sorgularına giriş.
  • Derleme zamanında sorgu ifadeleri, C# belirtiminde belirtilen kurallara göre Standart Sorgu İşleci yöntemi çağrılarına dönüştürülür. Sorgu söz dizimi kullanılarak ifade edilebilen tüm sorgular, yöntem söz dizimi kullanılarak da ifade edilebilir. Ancak çoğu durumda sorgu söz dizimi daha okunabilir ve kısadır. Daha fazla bilgi için bkz. C# dili belirtimi ve Standart sorgu işleçlerine genel bakış.
  • LINQ sorguları yazarken kural olarak, mümkün olduğunca sorgu söz dizimi ve gerektiğinde yöntem söz dizimi kullanmanızı öneririz. İki farklı form arasında semantik veya performans farkı yoktur. Sorgu ifadeleri genellikle yöntem söz diziminde yazılan eşdeğer ifadelerden daha okunabilir.
  • veya Maxgibi Count bazı sorgu işlemlerinin eşdeğer sorgu ifadesi yan tümcesi yoktur ve bu nedenle yöntem çağrısı olarak ifade edilmesi gerekir. Yöntem söz dizimi, çeşitli yollarla sorgu söz dizimi ile birleştirilebilir. Daha fazla bilgi için bkz. LINQ'te sorgu söz dizimi ve yöntem söz dizimi.
  • Sorgu ifadeleri, sorgunun uygulandığı türe bağlı olarak ifade ağaçlarında veya temsilcilerde derlenebilir. IEnumerable<T> sorgular temsilciler için derlenir. IQueryable ve IQueryable<T> sorgular ifade ağaçlarına derlenir. Daha fazla bilgi için bkz . İfade ağaçları.

Sonraki adımlar

LINQ hakkında daha fazla bilgi edinmek için Sorgu ifadesi temel bilgilerindeki bazı temel kavramları tanıyarak başlayın ve ilgilendiğiniz LINQ teknolojisinin belgelerini okuyun:

LINQ hakkında genel olarak daha ayrıntılı bilgi edinmek için bkz. C# dilinde LINQ.

C# dilinde LINQ ile çalışmaya başlamak için LINQ ile çalışma öğreticisine bakın.