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ğı örneğin 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:

  • LinQ to Objects sorgusunu IEnumerable<T> etkinleştirmek için bir türdeki arabirimi uygulama.

  • Bu tür için özel LINQ sorgulamasını etkinleştirmek için ve gibi WhereSelect bir türü genişleten 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ı etkinleştirmez, aynı zamanda kullanıcı tanımlı türlere yönelik işlemleri ve eşleştirmeyi de ekler, güncelleştirir ve siler.

Bu konuda, bu seçenekler açıklanmaktadır.

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

Bellek İçi Veriler

Bellek içi verilerin LINQ sorgusunu etkinleştirmenin iki yolu vardır. Veriler uygulayan IEnumerable<T>bir türdeyse, LINQ to Objects kullanarak verileri sorgulayabilirsiniz. Arabirimini uygulayarak IEnumerable<T> türünüzün numaralandırmasını etkinleştirmek mantıklı değilse, bu türdeki LINQ standart sorgu işleci yöntemlerini tanımlayabilir veya türü genişleten LINQ standart sorgu işleç 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 Veriler

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 gibi mevcut LINQ teknolojilerini SQL'e genişletmeye yönelik sağlayıcı modeli yoktur.

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 açıklanmaktadır.

Daha az karmaşık IQueryable bir sağlayıcı, tek bir Web hizmeti yöntemiyle arabirim oluşturabilir. Bu türden bir sağlayıcı, işlediği sorgularda belirli bilgiler beklediği için çok özeldir. Muhtemelen tek bir sonuç türü ortaya çıkaran kapalı bir tür sistemi vardır. 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 olan bir sağlayıcı, sorguyu temsil eden ifade ağacında yalnızca bir yöntem çağrısı ifadesi inceleyebilir ve kalan sorgu 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 hedefliyorsa, Web hizmetinin birden fazla yöntemiyle arabirim oluşturabilir ve sorgunun sorduğu soruya göre bir çağrı yöntemi seçebilir. Orta düzeyde karmaşıklığa sahip bir sağlayıcının basit bir sağlayıcıya göre daha zengin bir tür sistemi vardır, ancak yine de sabit bir tür sistemidir. Örneğin, sağlayıcı ters çevrilebilen bire çok ilişkilerine sahip türleri kullanabilir, ancak kullanıcı tanımlı türler için eşleştirme 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ı, sorguda çok çeşitli soruları işleyebileceği için daha az karmaşık olan bir sağlayıcıya göre daha geneldir. Ayrıca, açık bir tür sistemine de sahiptir ve bu nedenle kullanıcı tanımlı türleri eşleştirmek için kapsamlı bir altyapı içermelidir. Karmaşık bir sağlayıcının geliştirilmesi için önemli ölçüde çaba gerekir.

Ayrıca bkz.