Povolení zdroje dat pro dotazy LINQ
Existují různé způsoby, jak rozšířit LINQ, aby se dalo dotazovat na libovolný zdroj dat ve vzoru LINQ.Zdrojem dat může být kromě jiného například datová struktura, webová služba, systém souborů nebo databáze.Vzor LINQ usnadňuje klientům dotazování na zdroj dat, pro který je povoleno dotazování LINQ, protože syntaxe a vzor dotazu se nezmění.LINQ lze rozšířit na tyto zdroje dat následujícími způsoby:
Implementací rozhraní IEnumerable do určitého typu, aby se LINQ mohl dotazovat na objekty v tomto typu.
Vytvořením standardních metod operátorů dotazování, jako jsou Where a Select, jež rozšiřují typ, aby bylo povoleno vlastní dotazování LINQ na daný typ.
Vytvořením zprostředkovatele zdroje dat, který implementuje rozhraní IQueryable.Zprostředkovatel, který implementuje toto rozhraní, přijímá dotazy LINQ v podobě stromů výrazů, jež provádí vlastním způsobem, například vzdáleně.
Vytvořením zprostředkovatele zdroje dat, který využívá existují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 lze povolit dotazování LINQ na data v paměti.Pokud jsou data typu, který implementuje IEnumerable, můžete zadávat dotazy na data použitím LINQ na objekty.Pokud nemá smysl povolovat výčet typu pomocí implementace rozhraní IEnumerable, můžete v tomto typu definovat metody standardních dotazovacích operátorů LINQ nebo vytvořit metody standardních dotazovacích operátorů LINQ, které 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 na vzdálený zdroj dat je implementace rozhraní IQueryable.To je však něco jiného než rozšíření zprostředkovatele, jako je Technologie LINQ to SQL, pro zdroj dat.V Visual Studio 2008 nejsou dostupné žádné modely zprostředkovatelů pro rozšíření stávajících technologií LINQ, jako například Technologie LINQ to SQL, do jiných typů zdrojů dat.
Zprostředkovatelé IQueryable LINQ
Složitost zprostředkovatelů LINQ, kteří implementují IQueryable, se může výrazně lišit.Tato část pojednává o různých úrovních složitosti.
Méně složitý zprostředkovatel IQueryable může spolupracovat s jedinou metodu 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.K provádění většiny dotazů dochází místně, například pomocí implementací Enumerable standardních dotazovacích operátorů.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.
Středně složitý zprostředkovatel IQueryable může zaměřit zdroj dat, který má částečně výrazový 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.
Složitý zprostředkovatel IQueryable, jako je zprostředkovatel Technologie LINQ to SQL, může překládat úplné dotazy LINQ do výrazového dotazovacího jazyka, například do jazyka 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í.
Další informace o tom, jak vytvořit vlastního zprostředkovatele LINQ, naleznete v položkách blogu LINQ: Sestavení zprostředkovatele IQueryable a Odkaz na vše: Seznam zprostředkovatelů LINQ na webu MSDN.
Viz také
Referenční dokumentace
Koncepty
Přehled standardních operátorů dotazu