LINQ to Entities

LINQ to Entities, geliştiricilerin Visual Basic veya Visual C# kullanarak Entity Framework kavramsal modeline yönelik sorgular yazmasına olanak tanıyan DilLe Tümleşik Sorgu (LINQ) desteği sağlar. Entity Framework'e yönelik sorgular, nesne bağlamında yürütülen komut ağacı sorguları tarafından temsil edilir. LINQ to Entities, DilLe Tümleşik Sorgular (LINQ) sorgularını komut ağacı sorgularına dönüştürür, sorguları Entity Framework'e göre yürütür ve hem Entity Framework hem de LINQ tarafından kullanılabilecek nesneler döndürür. LinQ to Entities sorgusu oluşturma ve yürütme işlemi aşağıdadır:

  1. 'den ObjectContextbir ObjectQuery<T> örnek oluşturun.

  2. Örneği kullanarak ObjectQuery<T> C# veya Visual Basic'te LINQ to Entities sorgusu oluşturun.

  3. LINQ standart sorgu işleçlerini ve ifadelerini komut ağaçlarına dönüştürün.

  4. Sorguyu, komut ağacı gösteriminde veri kaynağına karşı yürütür. Yürütme sırasında veri kaynağında oluşturulan özel durumlar doğrudan istemciye geçirilir.

  5. Sorgu sonuçlarını istemciye geri döndür.

ObjectQuery Örneği Oluşturma

Genel ObjectQuery<T> sınıf, sıfır veya daha fazla türe sahip varlık koleksiyonu döndüren bir sorguyu temsil eder. Nesne sorgusu genellikle el ile oluşturmak yerine var olan bir nesne bağlamından oluşturulur ve her zaman bu nesne bağlamının üyesidir. Bu bağlam, sorguyu oluşturmak ve yürütmek için gereken bağlantı ve meta veri bilgilerini sağlar. Genel ObjectQuery<T> sınıf, oluşturucu yöntemleri LINQ sorgularının IQueryable<T> artımlı olarak derlenmesini sağlayan genel arabirimi uygular. C# var anahtar sözcüğünü (Dim Visual Basic'te, yerel tür çıkarımı etkinken) kullanarak derleyicinin varlık türünü çıkarmasına da izin vekleyebilirsiniz.

Sorguları Oluşturma

ObjectQuery<T> Genel arabirimi uygulayan genel IQueryable<T> sınıfın örnekleri, LINQ to Entities sorguları için veri kaynağı görevi görür. Sorguda, veri kaynağından almak istediğiniz bilgileri tam olarak belirtirsiniz. Sorgu ayrıca bu bilgilerin döndürülmeden önce nasıl sıralanacağını, gruplandırılacağını ve şekillendirileceğini belirtebilir. LINQ'te sorgu bir değişkende depolanır. Bu sorgu değişkeni hiçbir işlem gerçekleştirmez ve veri döndürmez; yalnızca sorgu bilgilerini depolar. Bir sorgu oluşturduktan sonra, herhangi bir veri almak için bu sorguyu yürütmeniz gerekir.

LINQ to Entities sorguları iki farklı söz diziminde oluşturulabilir: sorgu ifadesi söz dizimi ve yöntem tabanlı sorgu söz dizimi. Sorgu ifadesi söz dizimi ve yöntem tabanlı sorgu söz dizimi C# 3.0 ve Visual Basic 9.0'da yenidir.

Daha fazla bilgi için bkz . LINQ to Entities içindeki sorgular.

Sorgu Dönüştürme

Entity Framework'e karşı bir LINQ to Entities sorgusu yürütmek için LINQ sorgusunun Entity Framework'e karşı yürütülebilen bir komut ağacı gösterimine dönüştürülmesi gerekir.

LINQ to Entities sorguları LINQ standart sorgu işleçlerinden (, Select, Whereve gibi) ve GroupByifadelerden (x > 10, Contact.LastName vb.) oluşur. LINQ işleçleri bir sınıf tarafından tanımlanmaz, bunun yerine bir sınıftaki yöntemlerdir. LINQ'de ifadeler, ad alanı içindeki türlerin System.Linq.Expressions izin verdiği her şeyi ve uzantıya göre bir lambda işlevinde temsil edilebilen her şeyi içerebilir. Bu, Entity Framework tarafından izin verilen ifadelerin bir üst kümesidir ve tanımı veritabanında izin verilen işlemlerle sınırlıdır ve tarafından ObjectQuery<T>desteklenir.

Entity Framework'te hem işleçler hem de ifadeler tek bir tür hiyerarşisi tarafından temsil edilir ve bu hiyerarşi daha sonra bir komut ağacına yerleştirilir. Komut ağacı, sorguyu yürütmek için Entity Framework tarafından kullanılır. LINQ sorgusu komut ağacı olarak ifade edilemiyorsa, sorgu dönüştürülürken bir özel durum oluşturulur. LINQ'in Varlıklara dönüştürülmesi iki alt dönüştürme içerir: standart sorgu işleçlerinin dönüştürülmesi ve ifadelerin dönüştürülmesi.

LINQ'de Varlıklara geçerli bir çevirisi olmayan bir dizi LINQ standart sorgu işleci vardır. Bu işleçleri kullanma girişimleri sorgu çevirisi zamanında bir özel durumla sonuçlanır. Desteklenen LINQ to Entities işleçlerinin listesi için bkz . Desteklenen ve Desteklenmeyen LINQ Yöntemleri (LINQ to Entities).

LINQ to Entities içindeki standart sorgu işleçlerini kullanma hakkında daha fazla bilgi için bkz . LINQ to Entities Queries'da Standart Sorgu İşleçleri.

Genel olarak, LINQ to Entities ifadeleri sunucuda değerlendirilir, bu nedenle ifadenin davranışının CLR semantiğini izlemesi beklenmemelidir. Daha fazla bilgi için bkz . LINQ to Entities Queries içindeki ifadeler.

CLR yöntem çağrılarının veri kaynağındaki kurallı işlevlerle nasıl eşlendiği hakkında bilgi için bkz . CLR Yönteminden Kurallı İşlev Eşlemesine.

LINQ içinden Varlıklar sorgularına kurallı, veritabanı ve özel işlevleri çağırma hakkında bilgi için bkz . LINQ'te İşlevleri Varlıklara Çağırma Sorguları.

Sorgu Yürütme

LINQ sorgusu kullanıcı tarafından oluşturulduktan sonra, Entity Framework ile uyumlu bir gösterime dönüştürülür (komut ağaçları biçiminde), daha sonra veri kaynağında yürütülür. Sorgu yürütme zamanında, tüm sorgu ifadeleri (veya sorgunun bileşenleri) istemcide veya sunucuda değerlendirilir. Buna sonuç gerçekleştirme veya varlık projeksiyonlarında kullanılan ifadeler dahildir. Daha fazla bilgi için bkz . Sorgu Yürütme. Sorguyu bir kez derleyip farklı parametrelerle birkaç kez yürüterek performansı geliştirme hakkında bilgi için bkz . Derlenmiş Sorgular (LINQ to Entities).

Gerçekleştirme

Gerçekleştirme, sorgu sonuçlarını CLR türleri olarak istemciye geri döndürme işlemidir. LINQ to Entities içinde sorgu sonuçları veri kayıtları hiçbir zaman döndürülmüyor; her zaman kullanıcı veya Entity Framework tarafından tanımlanan veya derleyici (anonim türler) tarafından oluşturulan bir yedekleme CLR türü vardır. Tüm nesne gerçekleştirme, Entity Framework tarafından gerçekleştirilir. Entity Framework ile CLR arasında eşlenemez durumdan kaynaklanan hatalar nesne gerçekleştirme sırasında özel durumların atılmasıyla sonuçlanır.

Sorgu sonuçları genellikle aşağıdakilerden biri olarak döndürülür:

  • Sıfır veya daha fazla türü belirlenmiş varlık nesnesi koleksiyonu veya kavramsal modelde tanımlanan karmaşık türlerin projeksiyonu.

  • Entity Framework tarafından desteklenen CLR türleri.

  • Satır içi koleksiyonlar.

  • Anonim türler.

Daha fazla bilgi için bkz . Sorgu Sonuçları.

Bu Bölümde

LINQ to Entities Sorguları

LINQ to Entities Sorgu İfadeleri

LINQ to Entities Sorgularında Çağırma İşlevleri

Derlenmiş Sorgular (LINQ to Entities)

Sorgu Yürütme

Sorgu Sonuçları

LINQ to Entities Sorgularında Standart Sorgu İşleçleri

CLR Yöntemini Kurallı İşlev ile Eşleme

Desteklenen ve Desteklenmeyen LINQ Yöntemleri (LINQ to Entities)

LINQ to Entities Hakkında Bilinen Sorunlar ve Dikkat Edilmesi Gerekenler

Ayrıca bkz.