====== LINQ (Language Integrated Query) ====== **LINQ** umožňuje psát dotazy pro různé typy dat bez nutnosti opouštět syntaxi C#. Namísto psaní SQL dotazů jako textových řetězců využíváte plnou podporu kompilátoru a IntelliSense. ===== 1. Hlavní výhody LINQ ===== * **Deklarativní styl:** Programátor definuje, **co** chce získat, nikoliv **jak** se k tomu má dopracovat (cykly a podmínky řeší LINQ interně). * **Typová bezpečnost:** Chyby v dotazu odhalí kompilátor, nikoliv až běžící aplikace. * **Jednotnost:** Stejný dotaz můžete použít pro pole v paměti i pro tabulku v SQL databázi. --- ===== 2. Dva styly zápisu dotazů ===== LINQ nabízí dvě cesty, jak dotaz zformulovat. Jsou funkčně rovnocenné a lze je kombinovat. ==== A) Query Syntax (SQL-like) ==== Tento styl připomíná SQL a je často čitelnější pro složité dotazy. var dospeliUzivatele = from u in uzivatele where u.Vek >= 18 orderby u.Prijmeni select u.Jmeno; ==== B) Method Syntax (Lambda výrazy) ==== Využívá extension metody a lambda výrazy. Je stručnější a v praxi o něco častěji používaný. var dospeliUzivatele = uzivatele .Where(u => u.Vek >= 18) .OrderBy(u => u.Prijmeni) .Select(u => u.Jmeno); --- ===== 3. Nejpoužívanější operátory ===== ^ Operátor ^ Účel ^ | **Where** | Filtrování prvků podle podmínky. | | **Select** | Transformace (projekce) prvků na nový formát. | | **OrderBy** | Vzestupné řazení dat. | | **GroupBy** | Seskupení prvků podle určitého klíče. | | **First/FirstOrDefault** | Vrátí první prvek kolekce (nebo null, pokud je prázdná). | | **ToList/ToArray** | Okamžité vykonání dotazu a převod na konkrétní kolekci. | --- ===== 4. Odložené vykonávání (Deferred Execution) ===== Toto je klíčový koncept LINQ. Dotaz se **nevykoná** ve chvíli, kdy ho definujete, ale až ve chvíli, kdy začnete k jeho výsledkům přistupovat (např. v cyklu `foreach`). To umožňuje efektivní práci s daty – dotaz můžete postupně skládat a on se provede jako jeden optimalizovaný celek až v momentě potřeby. --- ===== 5. Poskytovatelé LINQ ===== Podle toho, na jaká data se dotazujete, používá .NET různé "poskytovatele": * **LINQ to Objects:** Pro práci s `IEnumerable` (Listy, Pole). * **LINQ to Entities:** Pro práci s databázemi přes [[it:sw:ef_core|Entity Framework Core]]. * **LINQ to XML:** Pro moderní zpracování XML dokumentů. ---- //Související články:// * [[it:sw:csharp|Jazyk C# a jeho vlastnosti]] * [[it:sw:ef_core|Entity Framework Core]] * [[it:sw:lambda_expressions|Lambda výrazy v C#]] //Tagy: {{tag>programming dot-net csharp linq data-querying development}}//