====== 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}}//