Aracılığıyla paylaş


LINQ Sorgusu için Veri Kaynağını Etkinleştirme (Visual Basic)

LINQ düzeninde sorgulanacak herhangi bir veri kaynağını etkinleştirmek için LINQ'yi genişletmenin çeşitli yolları vardır. Veri kaynağı bir veri yapısı, Web hizmeti, dosya sistemi veya veritabanı olabilir. LINQ düzeni, sorgunun söz dizimi ve deseni değişmediğinden istemcilerin LINQ sorgulamasının etkinleştirildiği bir veri kaynağını sorgulamasını kolaylaştırır. LINQ'in bu veri kaynaklarına genişletilebileceği yollar şunlardır:

  • Bir türde IEnumerable<T> arabirimini uygulayarak, bu türün LinQ to Objects ile sorgulanmasını sağlamak.

  • Bir türü genişleten ve o tür için özel LINQ sorgulaması yapılmasını sağlayan Where ve Select gibi standart sorgu işleci yöntemleri oluşturma.

  • Veri kaynağınız için arabirimi uygulayan IQueryable<T> bir sağlayıcı oluşturma. Bu arabirimi uygulayan bir sağlayıcı, LINQ sorgularını ifade ağaçları biçiminde alır ve örneğin uzaktan özel bir şekilde yürütebilir.

  • Veri kaynağınız için mevcut LINQ teknolojisinden yararlanan bir sağlayıcı oluşturma. Böyle bir sağlayıcı yalnızca sorgulamayı değil, kullanıcı tanımlı türler için ekleme, güncelleştirme ve silme işlemlerini ve eşlemeyi de etkinleştirir.

Bu konu başlığında bu seçenekler açıklanmaktadır.

Veri Kaynağınızın LINQ Sorgusunu Etkinleştirme

In-Memory Verileri

Bellek içi verilerin LINQ sorgusunu etkinleştirmenin iki yolu vardır. Eğer veriler IEnumerable<T> uygulayan bir türdeyse, verileri LINQ to Objects kullanarak sorgulayabilirsiniz. Arayüzünü uygulayarak türünüzün numaralandırılmasını etkinleştirmek mantıklı değilse, türde LINQ standart sorgu operatörü yöntemlerini tanımlayabilir veya türü genişleten LINQ standart sorgu operatörü yöntemleri oluşturabilirsiniz. Standart sorgu işleçlerinin özel uygulamaları, sonuçları döndürmek için ertelenmiş yürütme kullanmalıdır.

Uzak Erişim Verileri

Uzak veri kaynağının LINQ sorgulamasını etkinleştirmek için en iyi seçenek arabirimi uygulamaktır IQueryable<T> . Ancak bu, linq gibi bir sağlayıcının bir veri kaynağı için SQL'e genişletilmesinden farklıdır. Visual Studio 2008'de, LINQ to SQL gibi mevcut LINQ teknolojilerini diğer veri kaynağı türlerine genişletmeye yönelik sağlayıcı modelleri bulunmamaktadır.

IQueryable LINQ Sağlayıcıları

Uygulayan IQueryable<T> LINQ sağlayıcıları karmaşıklıklarında büyük ölçüde farklılık gösterebilir. Bu bölümde farklı karmaşıklık düzeyleri ele alınmaktadır.

Daha az karmaşık IQueryable bir sağlayıcı, tek bir Web hizmeti yöntemiyle arabirim oluşturabilir. İşlediği sorgularda belirli bilgiler beklediğinden bu tür sağlayıcı çok özeldir. Belki de tek bir sonuç türünü ortaya çıkarmak için kapalı bir tür sistemine sahiptir. Sorgunun yürütülmesinin çoğu, örneğin standart sorgu işleçlerinin uygulamaları kullanılarak Enumerable yerel olarak gerçekleşir. Daha az karmaşık bir sağlayıcı, ifade ağacında sorguyu temsil eden tek bir yöntem çağrısı ifadesini inceleyebilir ve sorgunun kalan mantığının başka bir yerde işlenmesine izin verebilir.

Orta IQueryable düzeyde karmaşıklık düzeyine sahip bir sağlayıcı, kısmen ifade eden sorgu diline sahip bir veri kaynağını hedef alabilir. Bir Web hizmetini hedeflerse, web hizmetinin birden fazla yöntemiyle arabirim oluşturup sorgunun oluşturduğu soruya göre çağrılacak yöntemi seçebilir. Orta karmaşıklıkta bir sağlayıcı, basit bir sağlayıcıdan daha zengin bir tür sistemine sahip olabilir, ancak yine de sabit bir tür sistemi olacaktır. Örneğin, sağlayıcı, iç içe geçilebilen birden fazla ilişkisi olan türleri sunabilir, ancak kullanıcı tarafından tanımlanan türler için haritalama teknolojisi sağlamaz.

LINQ to SQL sağlayıcısı gibi karmaşık IQueryable bir sağlayıcı, TAM LINQ sorgularını SQL gibi ifade edici bir sorgu diline çevirebilir. Karmaşık bir sağlayıcı daha az karmaşık bir sağlayıcıdan daha geneldir, çünkü sorgudaki daha çeşitli soruları işleyebilir. Ayrıca açık tür sistemine sahiptir ve bu nedenle kullanıcı tanımlı türleri eşlemek için kapsamlı bir altyapı içermelidir. Karmaşık bir sağlayıcı geliştirmek için önemli miktarda çaba gerekir.

Ayrıca bakınız