Integrovaný dotaz jazyka (LINQ) (C#)
Language-Integrated Query (LINQ) je název sady technologií založených na integraci možností dotazů přímo do jazyka C#. Dotazy na data se tradičně vyjadřují jako jednoduché řetězce bez kontroly typů v době kompilace nebo podpory IntelliSense. Kromě toho se musíte naučit jiný dotazovací jazyk pro každý typ zdroje dat: SQL databáze, dokumenty XML, různé webové služby atd. Pomocí LINQ je dotaz konstruktorem prvního jazyka, stejně jako třídy, metody, události. Dotazy se silnými typy objektů píšete pomocí klíčových slov jazyka a známých operátorů. Řada technologií LINQ poskytuje konzistentní prostředí dotazů pro objekty (LINQ to Objects), relační databáze (LINQ to SQL) a XML (LINQ to XML).
Pro vývojáře, který zapisuje dotazy, je nejviditelnější "jazykově integrovaná" část LINQ výrazem dotazu. Výrazy dotazů se zapisují v deklarativní syntaxi dotazu. Pomocí syntaxe dotazů můžete provádět operace filtrování, řazení a seskupení zdrojů dat s minimálním kódem. Stejné základní vzory výrazů dotazů slouží k dotazování a transformaci dat v databázích SQL, ADO.NET Datových sadách, dokumentech XML a datových proudech a kolekcích .NET.
Dotazy LINQ můžete psát v jazyce C# pro SQL Server databáze, dokumenty XML, ADO.NET datové sady a všechny kolekce objektů, které podporují IEnumerable nebo obecné IEnumerable<T> rozhraní. Podporu LINQ poskytuje také třetí strany pro mnoho webových služeb a dalších implementací databází.
Následující příklad ukazuje úplnou operaci dotazu. Úplná operace zahrnuje vytvoření zdroje dat, definování výrazu dotazu a spuštění dotazu v foreach
příkazu.
// Specify the data source.
int[] scores = { 97, 92, 81, 60 };
// Define the query expression.
IEnumerable<int> scoreQuery =
from score in scores
where score > 80
select score;
// Execute the query.
foreach (int i in scoreQuery)
{
Console.Write(i + " ");
}
// Output: 97 92 81
Následující obrázek z Visual Studio ukazuje částečně dokončený dotaz LINQ pro SQL Server databázi v jazyce C# i Visual Basic s plnou kontrolou typů a podporou IntelliSense:
Přehled výrazů dotazů
- Výrazy dotazů se dají použít k dotazování a transformaci dat z libovolného zdroje dat s podporou LINQ. Například jeden dotaz může načíst data z SQL databáze a vytvořit datový proud XML jako výstup.
- Výrazy dotazů jsou snadno pochopitelné, protože používají mnoho známých konstruktorů jazyka C#.
- Proměnné ve výrazu dotazu jsou všechny silně napsané, i když v mnoha případech nemusíte zadat typ explicitně, protože ho kompilátor může odvodit. Další informace najdete v tématu Relace typů v operacích dotazů LINQ.
- Dotaz se nespustí, dokud ne iterujete proměnnou
foreach
dotazu, například v příkazu. Další informace najdete v tématu Úvod k dotazům LINQ. - V době kompilace se výrazy dotazů převedou na volání metody Standard Query Operator podle pravidel stanovených ve specifikaci jazyka C#. Libovolný dotaz, který lze vyjádřit pomocí syntaxe dotazu, se dá vyjádřit také pomocí syntaxe metody. Ve většině případů je ale syntaxe dotazů čitelnější a stručnější. Další informace najdete v tématu Specifikace jazyka C# a Přehled standardních operátorů dotazů.
- Při psaní dotazů LINQ doporučujeme použít syntaxi dotazů, kdykoli je to možné, a syntaxi metody kdykoli je to potřeba. Mezi těmito dvěma různými formuláři neexistuje žádný sémantický rozdíl ani rozdíl výkonu. Výrazy dotazů jsou často čitelné než ekvivalentní výrazy napsané v syntaxi metody.
- Některé operace dotazu, například Count nebo Max, nemají žádnou ekvivalentní klauzuli výrazu dotazu a proto musí být vyjádřeny jako volání metody. Syntaxi metody lze kombinovat s syntaxí dotazů různými způsoby. Další informace najdete v tématu Syntaxe dotazu a syntaxe metody v LINQ.
- Výrazy dotazů je možné zkompilovat do stromů výrazů nebo delegátů v závislosti na typu, na který se dotaz použije. IEnumerable<T> dotazy jsou kompilovány delegátům. IQueryable a IQueryable<T> dotazy se kompilují do stromů výrazů. Další informace najdete v tématu Stromy výrazů.
Další kroky
Pokud chcete získat další podrobnosti o LINQ, začněte tím, že se seznámíte s některými základními koncepty v základech výrazů dotazů a pak si přečtěte dokumentaci k technologii LINQ, která vás zajímá:
- Dokumenty XML: LINQ to XML
- ADO.NET Entity Framework: LINQ to entity
- Kolekce ,soubory, řetězce atd.: LINQ to objects
Pokud chcete obecně lépe porozumět LINQ, podívejte se na LINQ v jazyce C#.
Pokud chcete začít pracovat s LINQ v jazyce C#, přečtěte si kurz Práce s LINQ.