LINQ Sorgusu için Veri Kaynağı Etkinleştirme
LINQ öğesini tüm veri kaynaklarının LINQ düzeninde sorgulanmasını sağlayacak şekilde 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özdizimi ve düzeni değişmediği için istemcilerin LINQ sorgulamanın etkin olduğu bir veri kaynağını sorgulamalarını kolaylaştırır.LINQ öğesinin bu veri kaynaklarına genişletilebileceği yöntemler şunlardır:
Herhangi bir türden LINQ to Objects sorgulamasını etkinleştirmek için bu türden IEnumerable arabirimini uygulama.
Bu türden özel LINQ sorgulamasını etkinleştirmek için Where ve Select gibi bir türü genişleten standart sorgu işleci yöntemleri oluşturma.
Veri kaynağınız için IQueryable arabirimini uygulayan bir sağlayıcı oluşturma.Bu arabirimi uygulayan sağlayıcı LINQ sorgularını, özel bir yöntemle yürütebileceği (örneğin, uzaktan) ifade ağaçları biçiminde alır.
Veri kaynağınız için varolan 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 sorgulamasını iki yolla etkinleştirebilirsiniz.Veriler IEnumerable uygulayan türdense, verileri LINQ to Objects kullanarak sorgulayabilirsiniz.IEnumerable arabirimi uygulanarak türünüzün numaralandırmasını etkinleştirmek mantıklı değilse, bu türde LINQ standart sorgu işleci yöntemlerini tanımlayabilir veya türü genişleten LINQ standart sorgu işleci 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ştirmenin en iyi yöntemi, IQueryable arabirimini uygulamaktır.Ancak bu, veri kaynağı için LINQ - SQL gibi bir sağlayıcının genişletilmesinden farklıdır.Visual Studio 2008 öğesinde LINQ - SQL gibi varolan LINQ teknolojilerini diğer veri kaynağı türlerine genişletmek için sağlayıcı modeli yoktur.
IQueryable LINQ Sağlayıcıları
IQueryable uygulayan LINQ sağlayıcılarının karmaşıklıkları birbirinden çok farklı olabilir.Bu bölümde, farklı karmaşıklık düzeyleri açıklanmaktadır.
Daha az karmaşık olan bir IQueryable sağlayıcısı, Web hizmetinin tek bir yöntemi ile 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.Sorgu yürütmesinin büyük bir bölümü, örneğin standart sorgu işleçlerinin Enumerable uygulamaları kullanılarak 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 düzeyde karmaşıklığa sahip bir IQueryable sağlayıcısı, kısmi ifade sorgusu diline sahip bir veri kaynağını hedefleyebilir.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 - SQL gibi karmaşık bir IQueryable sağlayıcısı, LINQ sorgularının tamamını SQL gibi ifade sorgusu 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.
Kendi LINQ sağlayıcınızı oluşturma hakkında daha fazla bilgi için MSDN'de LINQ: IQueryable Sağlayıcısı Oluşturma ve Her Şey için Bağlantı: LINQ Sağlayıcılarının Listesi blog girişlerine bakın.
Ayrıca bkz.
Başvuru
Kavramlar
Standart Sorgu İşleçlerine Genel Bakış