Language Integrated Query (LINQ)Language Integrated Query (LINQ)

Language-Integrated Query (LINQ) to nazwa zestawu technologii w oparciu o integrację możliwości zapytań bezpośrednio w C# języku.Language-Integrated Query (LINQ) is the name for a set of technologies based on the integration of query capabilities directly into the C# language. Tradycyjnie zapytania dotyczące danych są wyrażane jako proste ciągi bez sprawdzania typu w czasie kompilacji lub obsłudze IntelliSense.Traditionally, queries against data are expressed as simple strings without type checking at compile time or IntelliSense support. Ponadto należy poznać inny język zapytań dla każdego typu źródła danych: bazy danych SQL, dokumenty XML, różne usługi sieci Web itd.Furthermore, you have to learn a different query language for each type of data source: SQL databases, XML documents, various Web services, and so on. W LINQ, zapytanie jest konstrukcja języka pierwszej klasy, podobnie jak klasy, metody, zdarzenia.With LINQ, a query is a first-class language construct, just like classes, methods, events. Zapytania są pisane względem jednoznacznie wpisanych kolekcji obiektów przy użyciu słów kluczowych języka i znanych operatorów.You write queries against strongly typed collections of objects by using language keywords and familiar operators. Rodzina LINQ technologii zapewnia spójne środowisko zapytań dla obiektów (LINQ to Objects), relacyjnych baz danych (LINQ to SQL) i XML (LINQ to XML).The LINQ family of technologies provides a consistent query experience for objects (LINQ to Objects), relational databases (LINQ to SQL), and XML (LINQ to XML).

W przypadku deweloperów, którzy zapisują zapytania, najbardziej widoczna część "ze zintegrowanym językiem" w LINQ jest wyrażeniem zapytania.For a developer who writes queries, the most visible "language-integrated" part of LINQ is the query expression. Wyrażenia zapytań są zapisywane w postaci deklaracyjnej składni zapytań.Query expressions are written in a declarative query syntax. Za pomocą składni zapytania, można wykonywać operacje filtrowania, porządkowania i grupowania w źródłach danych z minimalnym kodem.By using query syntax, you can perform filtering, ordering, and grouping operations on data sources with a minimum of code. Za pomocą tych samych podstawowych wzorców wyrażeń zapytania można wykonywać zapytania i przekształcać dane w bazach danych SQL, zestawach danych ADO .NET, dokumentach XML i strumieniach i kolekcjach platformy .NET.You use the same basic query expression patterns to query and transform data in SQL databases, ADO .NET Datasets, XML documents and streams, and .NET collections.

Można napisać zapytania LINQ w programie C# dla SQL Server baz danych, dokumentów XML, zestawów danych ADO.NET i dowolnej kolekcji obiektów, które obsługują IEnumerable lub ogólny interfejs IEnumerable<T>.You can write LINQ queries in C# for SQL Server databases, XML documents, ADO.NET Datasets, and any collection of objects that supports IEnumerable or the generic IEnumerable<T> interface. Wsparcie LINQ jest również udostępniane przez inne firmy dla wielu usług sieci Web i innych implementacji baz danych.LINQ support is also provided by third parties for many Web services and other database implementations.

W poniższym przykładzie pokazano kompletną operację zapytania.The following example shows the complete query operation. Operacja Complete obejmuje tworzenie źródła danych, Definiowanie wyrażenia zapytania i wykonywanie zapytania w instrukcji foreach.The complete operation includes creating a data source, defining the query expression, and executing the query in a foreach statement.

class LINQQueryExpressions
{
    static void Main()
    {
        
        // Specify the data source.
        int[] scores = new int[] { 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

Poniższa ilustracja z programu Visual Studio pokazuje częściowo ukończone zapytanie LINQ względem bazy danych SQL Server w obu C# i Visual Basic z funkcją sprawdzania pełnego typu i obsługą IntelliSense:The following illustration from Visual Studio shows a partially-completed LINQ query against a SQL Server database in both C# and Visual Basic with full type checking and IntelliSense support:

Diagram przedstawiający zapytanie LINQ z technologią IntelliSense.

Omówienie wyrażenia zapytaniaQuery expression overview

  • Wyrażenia zapytań mogą służyć do wykonywania zapytań i przekształcania danych z dowolnego źródła danych z obsługą LINQ.Query expressions can be used to query and to transform data from any LINQ-enabled data source. Na przykład pojedyncze zapytanie może pobierać dane z bazy danych SQL i generować strumień XML jako dane wyjściowe.For example, a single query can retrieve data from a SQL database, and produce an XML stream as output.
  • Wyrażenia zapytań są łatwe w wzorcu, ponieważ korzystają z C# wielu znanych konstrukcji językowych.Query expressions are easy to master because they use many familiar C# language constructs.
  • Zmienne w wyrażeniu zapytania są wszystkie silnie wpisywane, chociaż w wielu przypadkach nie trzeba podawać typu jawnie, ponieważ kompilator może wywnioskować go.The variables in a query expression are all strongly typed, although in many cases you do not have to provide the type explicitly because the compiler can infer it. Aby uzyskać więcej informacji, zobacz temat relacje typu w operacjach zapytań LINQ.For more information, see Type relationships in LINQ query operations.
  • Zapytanie nie jest wykonywane, dopóki nie zostanie wykonana iteracja zmiennej zapytania, na przykład w instrukcji foreach.A query is not executed until you iterate over the query variable, for example, in a foreach statement. Aby uzyskać więcej informacji, zobacz wprowadzenie do zapytań LINQ.For more information, see Introduction to LINQ queries.
  • W czasie kompilacji wyrażenia zapytania są konwertowane na wywołania metody standardowego operatora zapytań zgodnie z regułami określonymi w C# specyfikacji.At compile time, query expressions are converted to Standard Query Operator method calls according to the rules set forth in the C# specification. Wszystkie zapytania, które mogą być wyrażone za pomocą składni zapytania, można również wyrazić przy użyciu składni metody.Any query that can be expressed by using query syntax can also be expressed by using method syntax. Jednak w większości przypadków Składnia zapytania jest bardziej czytelna i zwięzła.However, in most cases query syntax is more readable and concise. Aby uzyskać więcej informacji, zobacz temat C# Specyfikacja języka i standardowe operatory zapytań — Omówienie.For more information, see C# language specification and Standard query operators overview.
  • Jako zasada podczas pisania zapytań LINQ zaleca się używanie składni zapytań wszędzie tam, gdzie to możliwe, oraz składni metod, gdy jest to konieczne.As a rule when you write LINQ queries, we recommend that you use query syntax whenever possible and method syntax whenever necessary. Między dwoma różnymi formularzami nie ma semantyki ani różnicy wydajności.There is no semantic or performance difference between the two different forms. Wyrażenia zapytań są często bardziej czytelne niż równoważne wyrażenia wpisywane w składni metody.Query expressions are often more readable than equivalent expressions written in method syntax.
  • 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.Some query operations, such as Count or Max, have no equivalent query expression clause and must therefore be expressed as a method call. Składnię metody można łączyć z składnią zapytania na różne sposoby.Method syntax can be combined with query syntax in various ways. Aby uzyskać więcej informacji, zobacz składnia zapytań i składnia metod w LINQ.For more information, see Query syntax and method syntax in LINQ.
  • Wyrażenia zapytań można kompilować do drzew wyrażeń lub delegatów, w zależności od typu, do którego zastosowano zapytanie.Query expressions can be compiled to expression trees or to delegates, depending on the type that the query is applied to. zapytania IEnumerable<T> są kompilowane do delegatów.IEnumerable<T> queries are compiled to delegates. zapytania IQueryable i IQueryable<T> są kompilowane do drzew wyrażeń.IQueryable and IQueryable<T> queries are compiled to expression trees. Aby uzyskać więcej informacji, zobacz drzewa wyrażeń.For more information, see Expression trees.

Następne krokiNext steps

Aby dowiedzieć się więcej na temat LINQ, Zacznij od zapoznania się z niektórymi podstawowymi pojęciami dotyczącymi wyrażeń zapytania, a następnie zapoznaj się z dokumentacją technologii LINQ, w której Cię interesują.To learn more details about LINQ, start by becoming familiar with some basic concepts in Query expression basics, and then read the documentation for the LINQ technology in which you are interested:

Aby uzyskać bardziej szczegółowe informacje na temat LINQ, zobacz LINQ in C# .To gain a deeper understanding of LINQ in general, see LINQ in C#.

Aby rozpocząć pracę z LINQ w C#programie, zapoznaj się z samouczkiem dotyczącym pracy z LINQ.To start working with LINQ in C#, see the tutorial Working with LINQ.