Funkce C# podporující LINQ
Následující část představuje nové jazykové konstrukce zavedené v jazyce C# 3.0. I když se všechny tyto nové funkce používají do nějaké míry s dotazy LINQ, nejsou omezeny na LINQ a lze je použít v jakémkoli kontextu, kde je pro vás budou užitečné.
Výrazy dotazu
Výrazy dotazů používají deklarativní syntaxi podobnou SQL nebo XQuery k dotazování na kolekce IEnumerable. Syntaxe dotazu v době kompilace je převedena na volání metod implementace standardních rozšiřujících metod operátoru dotazu poskytovatele LINQ. Aplikace řídí standardní operátory dotazů, které jsou v oboru, zadáním příslušného oboru názvů pomocí using direktivy . Následující výraz dotazu vezme pole řetězců, seskupí je podle prvního znaku v řetězci a seskupí skupiny.
var query = from str in stringArray
group str by str[0] into stringGroup
orderby stringGroup.Key
select stringGroup;
Další informace najdete v tématu Výrazy dotazů LINQ.
Implicitně typované proměnné (var)
Místo explicitního určení typu při deklaraci a inicializaci proměnné můžete použít modifikátor var, který kompilátoru instruuje, aby odvodit a přiřadit typ, jak je znázorněno zde:
var number = 5;
var name = "Virginia";
var query = from str in stringArray
where str[0] == 'm'
select str;
Proměnné deklarované var jako jsou stejně silného typu jako proměnné, jejichž typ zadáte explicitně. Použití umožňuje vytvářet anonymní typy, ale lze ho použít pouze var pro místní proměnné. Pole lze také deklarovat s implicitním psaním.
Další informace najdete v tématu Implicitně typované místní proměnné.
Inicializátory objektu a kolekce
Inicializátory objektů a kolekcí umožňuje inicializovat objekty bez explicitního volání konstruktoru objektu. Inicializátory se obvykle používají ve výrazech dotazů při promítování zdrojových dat do nového datového typu. Za předpokladu, že třída s názvem public a Customer Name properties, inicializátor objektu lze použít Phone jako v následujícím kódu:
var cust = new Customer { Name = "Mike", Phone = "555-1212" };
Pokračujme v naší třídě a předpokládejme, že existuje zdroj dat s názvem a že pro každou objednávku s velkým , bychom chtěli vytvořit nový na základě Customer IncomingOrders tohoto OrderSize Customer pořadí. Dotaz LINQ lze spustit u tohoto zdroje dat a pomocí inicializace objektu vyplnit kolekci:
var newLargeOrderCustomers = from o in IncomingOrders
where o.OrderSize > 5
select new Customer { Name = o.Name, Phone = o.Phone };
Zdroj dat může mít pod pokličkou více vlastností než třída, jako je , ale při inicializaci objektu se data vrácená z dotazu odlétou do požadovaného datového typu. Zvolíme data, která jsou relevantní pro naši Customer OrderSize třídu. Výsledkem je, že teď máme IEnumerable vyplněné nové Customer y, které jsme chtěli. Výše uvedené informace lze zapsat také v syntaxi metody LINQ:
var newLargeOrderCustomers = IncomingOrders.Where(x => x.OrderSize > 5).Select(y => new Customer { Name = y.Name, Phone = y.Phone });
Další informace naleznete v tématu:
Anonymní typy
Anonymní typ je vytvořen kompilátorem a název typu je k dispozici pouze kompilátoru. Anonymní typy poskytují pohodlný způsob, jak do výsledku dotazu dočasně seskupit sadu vlastností, aniž byste museli definovat samostatný pojmenovaný typ. Anonymní typy jsou inicializovány novým výrazem a inicializátorem objektu, jak je znázorněno zde:
select new {name = cust.Name, phone = cust.Phone};
Další informace najdete v tématu Anonymní typy.
Metody rozšíření
Rozšiřující metoda je statická metoda, která může být přidružena k typu, aby ji bylo možné volat, jako by se jedná o metodu instance typu. Tato funkce vám umožňuje "přidat" nové metody do existujících typů, aniž byste je skutečně upravili. Standardní operátory dotazů jsou sada rozšiřujících metod, které poskytují funkce dotazů LINQ pro libovolný typ, který implementuje IEnumerable<T> .
Další informace najdete v tématu Metody rozšíření.
Lambda – výrazy
Výraz lambda je vložené funkce, která pomocí operátoru odděluje vstupní parametry od těla funkce a lze je v době kompilace převést na delegáta nebo => strom výrazů. Při programování v jazyce LINQ narazíte na výrazy lambda při volání přímých metod standardních operátorů dotazu.
Další informace naleznete v tématu: