Włączanie źródła danych na potrzeby wykonywania zapytań LINQ (Visual Basic)
Istnieją różne sposoby rozszerzania LINQ, aby umożliwić wykonywanie zapytań dotyczących dowolnego źródła danych we wzorcu LINQ. Źródłem danych może być między innymi struktura danych, usługi sieci Web, system plików lub baza danych. 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 IQueryable<T> interfejs. 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 dostawcy umożliwiłby nie tylko badanie, ale także wstawianie, aktualizowanie i usuwanie, a także mapowanie dla typów zdefiniowanych przez użytkownika.
W tym temacie omówiono te opcje.
Jak włączyć wykonywanie zapytań LINQ w odniesieniu do źródła danych
Dane w pamięci
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 kwerendy powinny stosować odroczone wykonania w celu zwracania wyników.
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.
Dostawy 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 interfejs z jedną metodą usługi sieci Web. Ten typ dostawcy jest bardzo specyficzny, ponieważ oczekuje określonych informacji w kwerendach, które obsługuje. Posiada system zamkniętego typu, być może podając pojedynczy typ wyniku. Większość wykonywania zapytania odbywa się lokalnie, na przykład przy użyciu Enumerable implementacji standardowych operatorów zapytań. Mniej skomplikowany dostawca może zbadać tylko jedną metodę wyrażenie wywołania w drzewie wyrażeń, które reprezentuje zapytanie i pozwala, aby pozostała logiki kwerendy była obsługiwana gdzie indziej.
Dostawca IQueryable
średniej złożoności może dotyczyć źródła danych, które ma częściowo ekspresyjny język zapytań. Jeśli jest przeznaczona do usługi sieci Web, może współpracować z więcej niż jedną metodą usługi sieci Web i wybierać metodę do wywołania na podstawie pytania stawianego przez kwerendę. Dostawca średniej złożoności będzie miał bogatszy system typów niż prosty dostawca, ale nadal będzie to system stałych typów. Na przykład dostawca może ujawnić typy, które mają relacje jeden do wielu. Te typy można przemierzać, ale nie zapewnia to technologii mapowania dla 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ż dostawca mniej skomplikowany, ponieważ może obsługiwać szerszą gamy pytań w kwerendzie. Ma także system typu otwartego i dlatego musi zawierać rozległe infrastruktury do mapowania typów zdefiniowanych przez użytkownika. Opracowywanie złożonego dostawcy wymaga znacznej ilości wysiłku.