- Language integrated query
Delegáti v C#
- Delegát v C# je objekt, který reprezentuje odkaz na metodu. Chová se jako typově bezpečný ukazatel na funkci.
Vlastnosti:
- Umožňuje předávat metody jako parametry.
- Delegát může odkazovat na více metod (multicast).
- Podporuje anonymní metody i lambda výrazy.
Vlastní deklarace delegáta
delegate string FuncDelegate(int input1, out int input2);
Předdefinované generické typy:
Func<T1,...,TResult>
– až 16 vstupních parametrů, vrací hodnotuFunc<int, int, int> add = (a, b) => a + b;
Action<T1,...>
– až 16 vstupních parametrů, nevrací žádnou hodnotu (void
)Action<string> write = s => Console.WriteLine(s);
Predicate<T>
– vracíbool
, typicky pro filtrováníPredicate<int> isPositive = x => x > 0;
Lambda výrazy
- Lambda výraz je anonymní metoda, která může být použita pro přiřazení k delegátu,
Func<>
,Action<>
nebo jako argument metod.
Zápis:
(parametry) => výraz
Příklad:
Func<int, int> square = x => x * x;
Console.WriteLine(square(5)); // Výstup: 25
- Může být předán jako parametr.
- Může být použit pro tvorbu výrazu (
Expression<T>
). - Staticky typovaný – při přiřazení musí být znám typ.
LINQ
- Language Integrated Query
- LINQ je technologie, která umožňuje psát dotazy přímo v jazyce C#. Tyto dotazy fungují nad:
- kolekcemi (
IEnumerable
) - databázemi (Entity Framework)
- XML dokumenty
- a dalšími datovými zdroji
- kolekcemi (
- LINQ poskytuje jednotný způsob práce s daty bez ohledu na jejich původ
Dotazovací (query) syntaxe
var result = from number in numbers
where number > 5
select number;
Fluent (method chaining) syntaxe – preferovaná:
var result = numbers.Where(n => n > 5).Select(n => n * 2);
Filtrování (Where
)
Vrací všechny prvky, které splňují podmínku:
var adults = people.Where(p => p.Age >= 18);
Projekce (Select
)
Převod objektů do jiného tvaru:
var names = people.Select(p => new { p.Name, p.Surname });
Řazení (OrderBy
, ThenBy
)
people.OrderBy(p => p.Age).ThenBy(p => p.Name);
Ořezání (Take
, Skip
)
people.Take(10); // prvních 10
people.Skip(5).Take(5); // 6. až 10.
Prvky (First
, FirstOrDefault
, Last
, Single
)
var student = people.First(p => p.Grade == 1);
Kontrola (Any
, All
, Contains
)
bool hasAdults = people.Any(p => p.Age >= 18);
Počet (Count
)
int numOfPVS = people.Count(p => p.OborKomb == "INF-PVS");
Unikátní prvky (Distinct
)
var uniqueValues = values.Distinct();
Množinové operace
var intersection = list1.Intersect(list2);
var union = list1.Union(list2);
var difference = list1.Except(list2);
Kdy použít LINQ
- Kdykoli pracujete s kolekcemi (pole, seznamy, výsledky dotazů).
- Potřebujete přehledný způsob filtrování, řazení, transformace.
- Vhodné i pro dotazování nad objekty načtenými z databáze nebo XML/JSON.
Shrnutí
- Delegáti umožňují pracovat s metodami jako s daty – např. je předávat, ukládat, nebo řetězit.
- Lambda výrazy zjednodušují zápis a jsou základním kamenem moderního C#.
- LINQ je výkonný nástroj pro efektivní, přehledné a typově bezpečné zpracování dat.