Vztahy typů v operacích dotazu LINQ (C#)
Chcete-li efektivně zapisovat dotazy, měli byste pochopit, jak typy proměnných v úplné operaci dotazu vzájemně souvisí. Pokud rozumíte těmto vztahům, budete snadněji pochopit ukázky LINQ a příklady kódu v dokumentaci. Kromě toho můžete pochopit, co se stane na pozadí, pokud jsou proměnné implicitně typované pomocí var .
Operace dotazů LINQ jsou silně typované ve zdroji dat, v samotném dotazu a v provádění dotazu. Typ proměnných v dotazu musí být kompatibilní s typem prvků ve zdroji dat a typem proměnné iterace v foreach příkazu. Toto silné zadání zaručuje, že při kompilaci jsou zachyceny chyby typu, pokud je lze opravit předtím, než se uživatelé dostanou.
Aby bylo možné předvést tyto vztahy typů, většina příkladů, které následují, používá explicitní psaní pro všechny proměnné. Poslední příklad ukazuje, jak se stejné zásady použijí, i když použijete implicitní zadání pomocí var.
Dotazy, které netransformují zdrojová data
následující ilustrace znázorňuje LINQ to Objects operaci dotazování, která neprovede žádné transformace dat. Zdroj obsahuje posloupnost řetězců a výstup dotazu je také posloupnost řetězců.

Argument typu zdroje dat určuje typ proměnné rozsahu.
Typ objektu, který je vybrán, určuje typ proměnné dotazu. Zde
nameje řetězec. Proto proměnná dotazu jeIEnumerable<string>.Proměnná dotazu se opakuje v
foreachpříkazu. Vzhledem k tomu, že je proměnná dotazu posloupností řetězců, je proměnná iterace také řetězcem.
Dotazy, které transformují zdrojová data
Následující ilustrace znázorňuje Technologie LINQ to SQL operaci dotazu, která provádí jednoduchou transformaci dat. Dotaz provede jako vstup sekvenci Customer objektů a Name ve výsledku vybere pouze vlastnost. Vzhledem k tomu Name , že je řetězec, dotaz vytváří sekvenci řetězců jako výstup.

Argument typu zdroje dat určuje typ proměnné rozsahu.
selectPříkaz vrátíNamevlastnost namísto celéhoCustomerobjektu. ProtožeNameje řetězec, argument typucustNameQueryjestring, notCustomer.Vzhledem k tomu
custNameQuery, že je sekvence řetězců,foreachiterační proměnná smyčky musí být takéstring.
Následující ilustrace znázorňuje mírně složitější transformaci. selectPříkaz vrátí anonymní typ, který zachycuje pouze dva členy původního Customer objektu.

Argument typu zdroje dat je vždy typ proměnné rozsahu v dotazu.
Vzhledem k tomu
select, že příkaz vytvoří anonymní typ, proměnná dotazu musí být implicitně zadána pomocívar.Vzhledem k tomu, že typ proměnné dotazu je implicitní, musí být proměnná iterace ve
foreachsmyčce také implicitní.
Umožnění odvození informací o typu kompilátoru
I když byste měli pochopit vztahy typů v operaci dotazu, máte možnost nechat kompilátor provádět veškerou práci za vás. Klíčové slovo var lze použít pro libovolnou místní proměnnou v operaci dotazu. Následující obrázek je podobný ukázkovému číslu 2, které bylo popsáno dříve. Nicméně kompilátor poskytuje silný typ pro každou proměnnou v operaci dotazu.

Další informace o naleznete var v tématu implicitně typované lokální proměnné.