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 kromě jiného například datová struktura, webová služba, systém souborů nebo databáze. 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ří:

  • IEnumerable<T> Implementace rozhraní v typu umožňující dotazování LINQ to Objects daného typu.

  • Vytvoření standardních metod operátoru dotazu, jako Where je a Select které rozšiřují typ, pro povolení vlastního dotazování LINQ tohoto 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ý zprostředkovatel umožní nejen dotazování, ale také operace vložení, aktualizace a odstranění a mapování pro typy definované uživatelem.

Těmito možnostmi se zabývá toto téma.

Jak povolit dotazování LINQ na vaše zdroje dat

Data v paměti

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 nemá smysl povolit výčet vašeho typu implementací IEnumerable<T> rozhraní, můžete v daném typu definovat metody standardního operátoru dotazu LINQ nebo vytvořit metody standardního operátoru dotazu LINQ, které tento typ rozšiřují. Vlastní implementace standardních dotazovacích operátorů musí vracet výsledky pomocí odloženého provedení.

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.

Zprostředkovatelé IQueryable LINQ

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

Méně složitý IQueryable zprostředkovatel může rozhraní s jednou metodou webové služby. Tento typ zprostředkovatele je velmi specifický, protože v dotazech, které zpracovává, očekává konkrétní informace. Má uzavřený systém typů, pravděpodobně vystavují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 ve stromu výrazů zkoumat pouze jeden výraz volání metody, 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 je zaměřena Webová služba, může spolupracovat s více než jednou metodu Webové služby a vybrat metodu volání na základě otázky, kterou dotaz představuje. Zprostředkovatel střední složitosti by měl bohatší systém typů než jednoduchý zprostředkovatel, ale stále by šlo o pevný systému typů. Zprostředkovatel například může vystavit typy, které mají relace typu jeden na mnoho, jež lze procházet, ale neposkytuje technologii mapování pro typy definované uživatelem.

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. Složitý zprostředkovatel je obecnější než méně složitý zprostředkovatel, protože je v dotazu schopen zpracovávat širší paletu otázek. Rovněž má otevřený systém typů, a proto musí obsahovat rozsáhlou infrastrukturu k mapování typů definovaných uživatelem. Vývoj složitého zprostředkovatele vyžaduje značné úsilí.

Viz také