Standardní operátory dotazů LINQ to Entities

V dotazu zadáte informace, které chcete načíst ze zdroje dat. Dotaz může také určit, jak se mají tyto informace řadit, seskupit a tvarovat před vrácením. LINQ poskytuje sadu standardních metod dotazu, které můžete použít v dotazu. Většina těchto metod působí na sekvencích; v tomto kontextu je sekvence objekt, jehož typ implementuje IEnumerable<T> rozhraní nebo IQueryable<T> rozhraní. Funkce dotazů standardních operátorů dotazů zahrnuje filtrování, projekce, agregaci, řazení, seskupení, stránkování a další. Některé z častěji používaných standardních operátorů dotazů mají vyhrazenou syntaxi klíčových slov, aby je bylo možné volat pomocí syntaxe výrazu dotazu. Výraz dotazu je jiný, čitelnější způsob vyjádření dotazu než ekvivalent založený na metodě. Klauzule výrazu dotazu se překládají do volání metod dotazu v době kompilace. Seznam standardních operátorů dotazu, které mají ekvivalentní klauzule výrazů dotazu, naleznete v tématu Přehled operátorů standardních dotazů.

Dotazy LINQ to Entities nepodporují všechny standardní operátory dotazů. Další informace najdete v tématu Podporované a nepodporované metody LINQ (LINQ to Entities). Toto téma obsahuje informace o standardních operátorech dotazů, které jsou specifické pro LINQ to Entities. Další informace o známých problémech v dotazech LINQ to Entities naleznete v tématu Známé problémy a důležité informace v LINQ to Entities.

Metody projekce a filtrování

Projekce odkazuje na transformaci prvků sady výsledků na požadovaný formulář. Můžete například projektovat podmnožinu vlastností, které potřebujete z každého objektu v sadě výsledků, můžete promítt vlastnost a provést matematický výpočet, nebo můžete projektovat celý objekt ze sady výsledků. Metody projekce jsou Select a SelectMany.

Filtrování odkazuje na operaci omezení sady výsledků tak, aby obsahovala pouze ty prvky, které odpovídají zadané podmínce. Metoda filtrování je Where.

Většina přetížení metod projekce a filtrování je podporována v LINQ to Entities s výjimkou těch, které přijímají poziční argument.

Metody join

Spojení je důležitá operace v dotazech, které cílí na zdroje dat, které nemají žádné vztahy navigace mezi sebou. Spojení dvou zdrojů dat je přidružení objektů v jednom zdroji dat k objektům v druhém zdroji dat, které sdílejí společný atribut nebo vlastnost. Metody spojení jsou Join a GroupJoin.

Většina přetížení metod spojení je podporována s výjimkou těch, které používají IEqualityComparer<T>. Důvodem je to, že porovnávač nelze přeložit do zdroje dat.

Set – metody

Operace sad v LINQ jsou operace dotazu, které zakládají jejich sady výsledků na přítomnosti nebo nepřítomnosti ekvivalentních prvků ve stejné nebo jiné kolekci (nebo sadě). Sady metod jsou All, , , ConcatContains, DefaultIfEmptyDistinct, EqualAll, Except, , Intersect, a Union. Any

Většina přetížení metod sady je podporována v LINQ to Entities, ačkoli existuje několik rozdílů v chování v porovnání s LINQ to Objects. Sady metod, které používají IEqualityComparer<T> , nejsou podporovány, protože porovnávač nelze přeložit do zdroje dat.

Metody řazení

Řazení nebo řazení odkazuje na řazení prvků sady výsledků na základě jednoho nebo více atributů. Zadáním více než jednoho kritéria řazení můžete přerušit vazby ve skupině.

Většina přetížení metod řazení jsou podporovány, s výjimkou těch, které používají IComparer<T>. Důvodem je to, že porovnávač nelze přeložit do zdroje dat. Metody řazení jsou OrderBy, , OrderByDescendingThenBy, ThenByDescendinga Reverse.

Vzhledem k tomu, že se dotaz provádí ve zdroji dat, chování řazení se může lišit od dotazů spuštěných v CLR. Důvodem je to, že ve zdroji dat je možné nastavit možnosti řazení velkých a malých písmen, řazení kanji a řazení s hodnotou null. V závislosti na zdroji dat můžou tyto možnosti řazení vést k různým výsledkům než v CLR.

Pokud zadáte stejný selektor klíčů ve více než jedné operaci řazení, vytvoří se duplicitní řazení. Toto není platné a vyvolá se výjimka.

Metody seskupení

Seskupení odkazuje na umístění dat do skupin tak, aby prvky v každé skupině sdílely společný atribut. Metoda seskupení je GroupBy.

Většina přetížení metod seskupení je podporována s výjimkou těch, které používají IEqualityComparer<T>. Důvodem je to, že porovnávač nelze přeložit do zdroje dat.

Metody seskupení se mapují na zdroj dat pomocí jedinečného dílčího dotazu pro selektor klíčů. Dílčí dotaz porovnání selektoru klíčů se provádí pomocí sémantiky zdroje dat, včetně problémů souvisejících s porovnáním null hodnot.

Agregační metody

Agregační operace vypočítá jednu hodnotu z kolekce hodnot. Například výpočet průměrné denní teploty z hodnoty denní teploty za měsíc je agregační operace. Agregační metody jsou Aggregate, CountAverageMaxLongCount, Min, a .Sum

Podporuje se většina přetížení agregačních metod. Pro chování související s hodnotami null používají agregační metody sémantiku zdroje dat. Chování metod agregace, pokud jsou zahrnuté hodnoty null, se můžou lišit v závislosti na tom, který back-endový zdroj dat se používá. Agregační chování metody pomocí sémantiky zdroje dat se může lišit také od toho, co se očekává od metod CLR. Například výchozí chování Sum metody na SQL Serveru je ignorovat všechny hodnoty null místo vyvolání výjimky.

Všechny výjimky, které jsou výsledkem agregace, jako je přetečení z Sum funkce, jsou vyvolány jako výjimky zdroje dat nebo výjimky Entity Framework během materializace výsledků dotazu.

Pro ty metody, které zahrnují výpočet přes sekvenci, například Sum nebo Average, se na serveru provede skutečný výpočet. V důsledku toho mohou na serveru nastat převody typů a ztráta přesnosti a výsledky se můžou lišit od očekávaného použití sémantiky CLR.

Výchozí chování agregačních metod pro hodnoty null/non-null je znázorněno v následující tabulce:

metoda Žádná data Všechny hodnoty null Některé hodnoty null Žádné hodnoty null
Average Vrátí hodnotu null. Vrátí hodnotu null. Vrátí průměr hodnot, které nejsou null v sekvenci. Vypočítá průměr posloupnosti číselných hodnot.
Count Vrátí hodnotu 0. Vrátí počet hodnot null v sekvenci. Vrátí počet hodnot null a nenulových hodnot v sekvenci. Vrátí počet prvků v posloupnosti.
Max Vrátí hodnotu null. Vrátí hodnotu null. Vrátí maximální hodnotu, která není null v sekvenci. Vrátí maximální hodnotu v sekvenci.
Min Vrátí hodnotu null. Vrátí hodnotu null. Vrátí minimální hodnotu, která není null v sekvenci. Vrátí minimální hodnotu v sekvenci.
Sum Vrátí hodnotu null. Vrátí hodnotu null. Vrátí součet hodnoty, která není null v sekvenci. Vypočítá součet posloupnosti číselných hodnot.

Metody typů

Obě metody LINQ, které se zabývají převodem typů a testováním, jsou podporovány v kontextu entity Framework. To znamená, že jedinými podporovanými typy jsou typy, které se mapují na příslušný typ Entity Framework. Seznam těchto typů najdete v tématu Koncepční typy modelů (CSDL). Metody typů jsou Convert a OfType.

OfType podporuje se pro typy entit. Convert podporuje se pro konceptuální primitivní typy modelu. Podporují se také C# is a as metody.

Metody stránkování

Operace stránkování vrací jeden prvek nebo více prvků ze sekvence. Podporované metody stránkování jsou First, , FirstOrDefaultSingle, SingleOrDefault, Skip, a Take.

Řada metod stránkování není podporována, protože není možné mapovat funkce na zdroj dat nebo nedostatek implicitního řazení sad ve zdroji dat. Metody, které vracejí výchozí hodnotu, jsou omezeny na konceptuální primitivní typy modelu a odkazové typy s výchozími hodnotami null. Stránkovací metody spouštěné v prázdné sekvenci vrátí hodnotu null.

Viz také