Sdílet prostřednictvím


Povolení zdroje dat pro dotazování LINQ (Visual Basic)

Existují různé způsoby, jak rozšířit LINQ, aby se jakýkoli zdroj dat mohl dotazovat v modelu LINQ. Zdrojem dat může být datová struktura, webová služba, systém souborů nebo databáze, aby bylo možné některé pojmenovat. Model LINQ usnadňuje klientům dotazování na zdroj dat, pro který je povolené dotazování LINQ, protože syntaxe a vzor dotazu se nemění. Mezi způsoby rozšíření LINQ na tyto zdroje dat patří:

  • Implementace rozhraní IEnumerable<T> v typu pro umožnění dotazování LINQ to Objects u daného typu.

  • Vytvoření standardních metod operátorů dotazů, jako jsou Where a Select, které rozšiřují typ, umožňující vlastní dotazy LINQ daného typu.

  • Vytvoření zprostředkovatele pro váš zdroj dat, který implementuje IQueryable<T> rozhraní. Zprostředkovatel, který implementuje toto rozhraní, přijímá dotazy LINQ ve formě stromů výrazů, které může provádět vlastním způsobem, například vzdáleně.

  • Vytvoření zprostředkovatele pro váš zdroj dat, který využívá stávající technologii LINQ. Takový poskytovatel by umožnil nejen dotazování, ale také operace vložení, aktualizace a odstranění a mapování pro uživatelem definované typy.

Toto téma popisuje tyto možnosti.

Jak povolit dotazování LINQ ve vašem zdroji dat

In-Memory údaje

Existují dva způsoby, jak povolit dotazování LINQ na data v paměti. Pokud jsou data typu, který implementuje IEnumerable<T>, můžete data dotazovat pomocí LINQ to Objects. Pokud nedává smysl povolit výčet vašeho typu implementací rozhraní IEnumerable<T>, můžete v tomto typu definovat metody standardních operátorů dotazu LINQ nebo vytvořit metody standardních operátorů dotazu LINQ, které tento typ rozšiřují. Vlastní implementace standardních operátorů dotazů by měly k vrácení výsledků použít odložené spuštění.

Vzdálená data

Nejlepší možností pro povolení dotazování LINQ vzdáleného zdroje dat je implementace IQueryable<T> rozhraní. To se ale liší od rozšíření poskytovatele, jako je LINQ na SQL pro zdroj dat. V sadě Visual Studio 2008 nejsou k dispozici žádné modely poskytovatelů pro rozšíření stávajících technologií LINQ, jako je LINQ na SQL, na jiné typy zdrojů dat.

IQueryable – Zprostředkovatelé LINQ

Poskytovatelé LINQ, kteří implementují IQueryable<T> , se můžou značně lišit v jejich složitosti. Tato část popisuje různé úrovně složitosti.

Méně složitý IQueryable zprostředkovatel může komunikovat s jedinou metodou webové služby. Tento typ poskytovatele je velmi specifický, protože očekává konkrétní informace v dotazech, které zpracovává. Má uzavřený typový systém, možná odhalující jeden typ výsledku. Většina provádění dotazu probíhá místně, například pomocí Enumerable implementací standardních operátorů dotazu. Méně složitý zprostředkovatel může zkoumat pouze jeden výraz volání metody ve stromu výrazů, který představuje dotaz, a nechat zbývající logiku dotazu zpracovat jinde.

Poskytovatel IQueryable střední složitosti může cílit na zdroj dat, který má částečně výrazný dotazovací jazyk. Pokud služba cílí na webovou službu, může komunikovat s více než jednou metodou této webové služby a vybrat metodu, kterou volá podle otázky, kterou dotaz klade. Poskytovatel střední složitosti by měl bohatší systém typů než jednoduchý poskytovatel, ale stále by to byl pevný typový systém. Poskytovatel může například zpřístupnit typy, které mají relaci 1:N, kterou je možné procházet, ale neposkytne mapovací technologii pro uživatelem definované typy.

Komplexní IQueryable zprostředkovatel, jako je poskytovatel LINQ to SQL, může přeložit kompletní dotazy LINQ do výrazového dotazovacího jazyka, jako je SQL. Komplexní poskytovatel je obecnější než méně složitý poskytovatel, protože dokáže zpracovat širší škálu otázek v dotazu. Má také otevřený typový systém, a proto musí obsahovat rozsáhlou infrastrukturu pro mapování uživatelsky definovaných typů. Vývoj komplexního poskytovatele vyžaduje značné úsilí.

Viz také