Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Istnieją różne sposoby rozszerzania LINQ, aby umożliwić wykonywanie zapytań dotyczących dowolnego źródła danych we wzorcu LINQ. Źródło danych może być strukturą danych, usługą sieci Web, systemem plików lub bazą danych, aby je wymienić. Wzorzec LINQ ułatwia klientom wykonywanie zapytań dotyczących źródła danych, dla którego włączono wykonywanie zapytań LINQ, ponieważ składnia i wzorzec zapytania nie ulegają zmianie. Sposoby rozszerzania LINQ na te źródła danych obejmują następujące elementy:
Implementowanie interfejsu IEnumerable<T> w typie w celu włączenia zapytań LINQ to Objects tego typu.
Tworzenie standardowych metod operatorów zapytań, takich jak Where i Select które rozszerzają typ, aby umożliwić niestandardowe wykonywanie zapytań LINQ tego typu.
Tworzenie dostawcy dla źródła danych, który implementuje interfejs IQueryable<T>. Dostawca, który implementuje ten interfejs, odbiera zapytania LINQ w postaci drzew wyrażeń, które mogą być wykonywane w niestandardowy sposób, na przykład zdalnie.
Tworzenie dostawcy dla źródła danych, który korzysta z istniejącej technologii LINQ. Taki dostawca umożliwiałby nie tylko wykonywanie zapytań, ale także operacje wstawiania, aktualizowania i usuwania oraz mapowania dla typów zdefiniowanych przez użytkownika.
W tym temacie omówiono te opcje.
Jak włączyć obsługę zapytań LINQ dla źródła danych
dane In-Memory
Istnieją dwa sposoby włączania zapytań LINQ dotyczących danych w pamięci. Jeśli dane są typu, który implementuje IEnumerable<T>, można wykonywać zapytania dotyczące danych przy użyciu linQ to Objects. Jeśli nie ma sensu włączyć wyliczania typu przez zaimplementowanie interfejsu IEnumerable<T> , można zdefiniować standardowe metody operatorów zapytań LINQ w tym typie lub utworzyć standardowe metody operatorów zapytań LINQ, które rozszerzają typ. Niestandardowe implementacje standardowych operatorów zapytań powinny używać odroczonego wykonywania, aby zwrócić wyniki.
Dane zdalne
Najlepszą opcją umożliwiającą wykonywanie zapytań LINQ w zdalnym źródle danych jest zaimplementowanie interfejsu IQueryable<T> . Różni się to jednak od rozszerzania dostawcy, takiego jak LINQ to SQL dla źródła danych. W programie Visual Studio 2008 nie są dostępne żadne modele dostawcy do rozszerzania istniejących technologii LINQ, takich jak LINQ to SQL, do innych typów źródeł danych.
Dostawcy IQueryable LINQ
Dostawcy LINQ, którzy implementują IQueryable<T> , mogą się znacznie różnić w ich złożoności. W tej sekcji omówiono różne poziomy złożoności.
Mniej złożony IQueryable dostawca może komunikować się z jedną metodą usługi internetowej. Ten typ dostawcy jest bardzo specyficzny, ponieważ oczekuje określonych informacji w zapytaniach, które obsługuje. Ma zamknięty system typów, być może uwidaczniając pojedynczy typ wyniku. Większość wykonywania zapytania odbywa się lokalnie, na przykład przy użyciu Enumerable implementacji standardowych operatorów zapytań. Mniej złożony dostawca może zbadać tylko jedno wyrażenie wywołania metody w drzewie wyrażeń, które reprezentuje zapytanie, i pozwolić, aby pozostała logika zapytania została obsłużona w innym miejscu.
Dostawca IQueryable średniej złożoności może mieć na celu źródło danych, które ma częściowo rozbudowany język zapytań. Jeśli jest przeznaczona dla usługi internetowej, może łączyć się z więcej niż jedną metodą i wybrać metodę do wywołania na podstawie zapytania. Dostawca o średniej złożoności miałby bogatszy system typów niż prosty dostawca, ale nadal byłby to system stałego typu. Na przykład dostawca może uwidaczniać typy, które mają relacje jeden do wielu, po których można się poruszać, ale nie zapewnia technologii do mapowania typów zdefiniowanych przez użytkownika.
IQueryable Złożony dostawca, taki jak dostawca LINQ to SQL, może tłumaczyć kompletne zapytania LINQ na ekspresowy język zapytań, taki jak SQL. Złożony dostawca jest bardziej ogólny niż mniej złożony dostawca, ponieważ może obsłużyć szerszą gamę pytań w zapytaniu. Ma również system typu otwartego i dlatego musi zawierać rozbudowaną infrastrukturę do mapowania typów zdefiniowanych przez użytkownika. Przygotowanie złożonego dostawcy wymaga znacznego nakładu pracy.