Language Integrated Query (LINQ)

Language-Integrated Query (LINQ) to nazwa zestawu technologii opartego na integracji możliwości zapytań bezpośrednio z językiem C#. Tradycyjnie zapytania względem danych są wyrażane jako proste ciągi bez sprawdzania typów w czasie kompilacji ani obsługi funkcji IntelliSense. Ponadto musisz nauczyć się innego języka zapytań dla każdego typu źródła danych: SQL baz danych, dokumentów XML, różnych usług sieci Web i tak dalej. W przypadku LINQ zapytanie jest konstrukcją języka pierwszej klasy, podobnie jak klasy, metody i zdarzenia.

Dla dewelopera, który pisze zapytania, najbardziej widoczną "zintegrowaną z językiem" częścią LINQ jest wyrażenie zapytania. Wyrażenia zapytań są zapisywane w składni zapytania deklaratywnego. Za pomocą składni zapytań można wykonywać operacje filtrowania, zamawiania i grupowania na źródłach danych przy użyciu minimalnej wartości kodu. Te same podstawowe wzorce wyrażeń zapytań są wykorzystywane do wykonywania zapytań i przekształcania danych w bazach danych SQL, zestawach danych ADO .NET, dokumentach XML i strumieniach oraz kolekcjach .NET.

W poniższym przykładzie pokazano pełną operację zapytania. Pełna operacja obejmuje tworzenie źródła danych, definiowanie wyrażenia zapytania i wykonywanie zapytania w instrukcji foreach .

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

Omówienie wyrażeń zapytania

  • Wyrażenia zapytań mogą służyć do wykonywania zapytań i przekształcania danych z dowolnego źródła danych z obsługą LINQ. Na przykład pojedyncze zapytanie może pobierać dane z bazy SQL danych i tworzyć strumień XML jako dane wyjściowe.

  • Wyrażenia zapytań są łatwe do zrozumienia, ponieważ używają wielu znanych konstrukcji języka C#.

  • Wszystkie zmienne w wyrażeniu zapytania są silnie typowane, chociaż w wielu przypadkach nie trzeba jawnie poświadczyć typu, ponieważ kompilator może go wywnioskować. Aby uzyskać więcej informacji, zobacz Relacje typów w operacjach zapytań LINQ.

  • Zapytanie nie jest wykonywane, dopóki nie iteruje się po zmiennej zapytania, na przykład w instrukcji foreach . Aby uzyskać więcej informacji, zobacz Introduction to LINQ queries (Wprowadzenie do zapytań LINQ).

  • W czasie kompilacji wyrażenia zapytań są konwertowane na wywołania metody Standard Query Operator zgodnie z regułami określonymi w specyfikacji języka C#. Każde zapytanie, które można wyrazić przy użyciu składni zapytania, można również wyrazić przy użyciu składni metody. Jednak w większości przypadków składnia zapytań jest bardziej czytelna i zwięzła. Aby uzyskać więcej informacji, zobacz Specyfikacja języka C# iOmówienie standardowych operatorów zapytań.

  • Jako regułę podczas pisania zapytań LINQ zalecamy używanie składni zapytań zawsze, gdy jest to możliwe, i składni metody w razie potrzeby. Nie ma różnicy semantycznej ani wydajności między tymi dwiema różnymi formami. Wyrażenia zapytań są często bardziej czytelne niż wyrażenia równoważne napisane w składni metody.

  • Niektóre operacje zapytań, takie jak Count lub Max, nie mają równoważnej klauzuli wyrażenia zapytania i dlatego muszą być wyrażone jako wywołanie metody. Składnię metody można łączyć ze składnią zapytań na różne sposoby. Aby uzyskać więcej informacji, zobacz Składnia zapytania i składnia metody w LINQ.

  • Wyrażenia zapytań można kompilować do drzew wyrażeń lub delegatów w zależności od typu, do jakiego zastosowano zapytanie. IEnumerable<T> Zapytania są kompilowane do delegatów. IQueryable Zapytania i IQueryable<T> są kompilowane do drzew wyrażeń. Aby uzyskać więcej informacji, zobacz Drzewa wyrażeń.

Następne kroki

Aby dowiedzieć się więcej na temat LINQ, zacznij od zapoznania się z podstawowymi pojęciami z tematu Podstawy wyrażeń zapytań, a następnie zapoznaj się z dokumentacją technologii LINQ, która Cię interesuje:

Aby lepiej zrozumieć linq ogólnie, zobacz LINQ in C#.

Aby rozpocząć pracę z LINQ w języku C#, zobacz samouczek Praca z LINQ.