TOC

This article has been localized into Czech by the community.

LINQ:

LINQ: Syntaxe dotazu vs. syntaxe metody

V předchozím článku jsme si rychle prohlédli, jak obě syntaxe LINQ vypadají, ale pojďme si je znovu dát vedle sebe, abyste si byli jisti, o čem budeme v tomto článku diskutovat:

 var listOfNames = new List<string>()
{
    "John Doe",
    "Jane Doe",
    "Jenna Doe",
    "Joe Doe"
};

// Query syntax
var qNames = from name in listOfNames where name.Length <= 8 select name;
// Method syntax
var mNames = listOfNames.Where(name => name.Length <= 8);

I když oba řádky dosáhnou přesně téhož výsledku, syntaktický rozdíl je zcela zřejmý: syntax dotazu vypadá více jako jiné dotazovací jazyky, např. SQL, a méně jako běžný příkaz v C#. Na druhé straně syntax metody vypadá velmi podobně jako zbytek kódu C#, který jste viděli v tomto tutoriálu.

Takže největší rozdíl je určitě jen v syntaxi a proto uvidíte obě varianty používané při čtení článků o C# a hledání odpovědí na otázky, které byste mohli mít. Zdá se, že syntax dotazu je trochu populárnější, protože někteří lidé ji považují za snadněji čitelnou než syntax metody - mohou to být lidé, kteří jsou zvyklí vyjadřovat operace získávání dat v SQL. Na druhou stranu, pokud jste nikdy nepoužívali dotazovací jazyk jako SQL, ale máte nějaké zkušenosti s C#, můžete považovat syntax metody za snadněji čitelnou. Také, pro alespoň pár operací, jako je počítání položek ve výsledku dotazu, budete muset použít syntax metody.

Lambda výrazy

Ve vzoru syntaxe metody si můžete všimnout něčeho, co jste dosud neviděli, jako parametru metody Where(). Vypadá to takto:

name => name.Length <= 8

Toto se nazývá lambda výraz, a i když není specifickou funkcí LINQ, využívá se v LINQ velmi často. Proto se s ním budete setkávat i v dalších článcích, a i když se do podrobností o lambda výrazech dostanu v jiném článku, je nyní dobrý čas získat základní pochopení toho, jak lambda výrazy fungují.

Je to ve skutečnosti docela jednoduché. Lambda výraz má levou a pravou stranu, které jsou rozděleny operátorem => (který se nesmí zaměňovat s operátorem "větší nebo rovno", který vypadá takto: >=).

Na levé straně máme vstupní parametr(y) - může jich být několik, ale v našem příkladu je to jen jeden, což je proměnná name. V tomto případě pochází z metody Where(), která iteruje přes náš seznam jmen, a my si vybereme název. Zvolil jsem "name", protože to najdete v seznamu jmen, ale mohli byste to také nazvat "x", "z", "foobar" nebo jakkoli jinak.

Na pravé straně máme část s výrazem/příkazem. Zde generujeme očekávaný výsledek - v tomto případě logickou hodnotu, která metodu Where() informuje, zda má jméno v otázce zahrnout nebo ne. Odpovídáme na to výrazem, říkajícím, že chceme jméno zahrnout, pokud má délku 8 (nebo méně) znaků. Můžeme (ale nemusíme) k tomu určení použít vstup (levá strana). Opět se odkazujeme jako na "name", ale mohli bychom to nazvat "x" - v tom případě by výrok vypadal takto:

var mNames = listOfNames.Where(x => x.Length <= 8);

Lambda výrazy se netýkají pouze dotazů LINQ, ale jak bylo zmíněno, jsou důležité při používání LINQ - to uvidíte v následujících článcích. Pokud chcete vědět více o lambda výrazech, podívejte se na jiná místa tohoto tutoriálu, kde bude toto téma pokryto.

Shrnutí

LINQ přichází ve dvou syntaktických podobách: dotazovací syntax a syntax metody. Mohou dělat téměř to samé, ale zatímco dotazovací syntax je téměř nový jazyk v rámci C#, syntax metody vypadá jako běžné volání metod v C#. V tomto tutoriálu budeme většinou používat syntax metody, když budeme v následujících článcích diskutovat o všech možných operacích dostupných s LINQ.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!