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

Language-Integrated Query (LINQ) to nazwa zestawu technologii, w oparciu o integrację możliwości zapytania bezpośrednio w języku C#.Language-Integrated Query (LINQ) is the name for a set of technologies based on the integration of query capabilities directly into the C# language. Tradycyjne zapytania dotyczące danych są wyrażane jako zwykłe ciągi bez typu sprawdzania w kompilacji czasu lub obsługę funkcji IntelliSense.Traditionally, queries against data are expressed as simple strings without type checking at compile time or IntelliSense support. Ponadto konieczne będzie uczenia się języka zapytań różne dla każdego typu źródła danych: Bazy danych SQL, dokumentów XML, różnych usług sieci Web i tak dalej.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. Za pomocą LINQ kwerenda jest staje się konstrukcją języka, podobnie jak klasy, metody i zdarzenia.With LINQ, a query is a first-class language construct, just like classes, methods, events.

Deweloper, który zapisuje zapytania, aby uzyskać najbardziej widoczne części "language-integrated" LINQ jest wyrażenia 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 deklaratywne składni zapytania.Query expressions are written in a declarative query syntax. Za pomocą składni zapytań, można wykonać filtrowanie, porządkowanie i operacje do źródeł danych z co najmniej kodu.By using query syntax, you can perform filtering, ordering, and grouping operations on data sources with a minimum of code. Używasz tych samych wzorców wyrażeń zapytania podstawowego do wykonywania zapytań i przekształcania danych w bazy danych SQL, ADO .NET w zestawach danych, strumienie i dokumentów XML i kolekcjami .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.

Poniższy przykład przedstawia pełną operację zapytania.The following example shows the complete query operation. Zakończyć operację obejmuje tworzenie źródła danych, definiując wyrażenie zapytania i wykonywania zapytania w foreach instrukcji.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

Omówienie zapytań w wyrażeniuQuery expression overview

  • Wyrażenia zapytań może służyć do wykonywania zapytań i przekształcania danych z dowolnego źródła danych z obsługą zapytań LINQ.Query expressions can be used to query and to transform data from any LINQ-enabled data source. Na przykład jednego zapytania można pobierać dane z bazy danych SQL i generuje 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 do gałęzi głównej, ponieważ używają one wiele dobrze znanych konstrukcji języka C#.Query expressions are easy to master because they use many familiar C# language constructs.

  • Zmienne w wyrażeniu zapytania są wszystkie silnie typizowane, chociaż w wielu przypadkach nie trzeba jawnie udostępniają typ, 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 relacje typów w składniku LINQ zapytania operacje.For more information, see Type relationships in LINQ query operations.

  • Zapytanie nie jest wykonywana do czasu iteracji nad zmienną kwerendy, na przykład w foreach instrukcji.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żeń zapytania są konwertowane na wywołania metody standardowej kwerendy operatora zgodnie z regułami określonymi w specyfikacji języka C#.At compile time, query expressions are converted to Standard Query Operator method calls according to the rules set forth in the C# specification. Każde zapytanie, które mogą być wyrażone za pomocą składni zapytania można również wyrazić za pomocą 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 kwerendy jest bardziej czytelne i zwięzłe.However, in most cases query syntax is more readable and concise. Aby uzyskać więcej informacji, zobacz specyfikacji języka C# i omówienie operatorów standardowej kwerendy.For more information, see C# language specification and Standard query operators overview.

  • Zgodnie z zasadą podczas pisania zapytań LINQ, firma Microsoft zaleca użycie składni zapytań, jeśli to możliwe, a składnia metody, jeśli zajdzie taka potrzeba.As a rule when you write LINQ queries, we recommend that you use query syntax whenever possible and method syntax whenever necessary. Brak nie semantycznego lub wydajność różnica między dwoma formami różne.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 napisane przy użyciu składni metody.Query expressions are often more readable than equivalent expressions written in method syntax.

  • Zapytanie niektóre operacje, takie jak Count lub Max, mieć żadnej klauzuli wyrażenia kwerendy równoważne i dlatego musi być wyrażona jako wywołania 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ładnia metody można łączyć za pomocą składni zapytań na różne sposoby.Method syntax can be combined with query syntax in various ways. Aby uzyskać więcej informacji, zobacz składnia zapytania i metody w technologii LINQ.For more information, see Query syntax and method syntax in LINQ.

  • Wyrażenia zapytań może być kompilowane, drzew wyrażeń lub delegatów, w zależności od typu, który dotyczy zapytanie.Query expressions can be compiled to expression trees or to delegates, depending on the type that the query is applied to. IEnumerable<T> zapytania są kompilowane do delegatów.IEnumerable<T> queries are compiled to delegates. IQueryable i IQueryable<T> kwerendy są kompilowane w drzewach wyrażeń.IQueryable and IQueryable<T> queries are compiled to expression trees. Aby uzyskać więcej informacji, zobacz drzew wyrażeń.For more information, see Expression trees.

Następne krokiNext steps

Aby dowiedzieć się więcej na temat LINQ, należy rozpocząć od staje się poznać niektóre podstawowe pojęcia związane z podstawowe informacje o wyrażeniach zapytań, a następnie zapoznaj się z dokumentacją dla technologii LINQ, w którym interesuje Cię: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ć lepszy opis LINQ ogólnie rzecz biorąc, zobacz LINQ w C#.To gain a deeper understanding of LINQ in general, see LINQ in C#.

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