Standardowe operatory zapytań — OmówienieC#()Standard Query Operators Overview (C#)

Standardowe operatory zapytań to metody, które tworzą wzorzec LINQ.The standard query operators are the methods that form the LINQ pattern. Większość z tych metod operuje na sekwencjach, gdzie sekwencja jest obiektem, którego typ IEnumerable<T> implementuje interfejs IQueryable<T> lub interfejs.Most of these methods operate on sequences, where a sequence is an object whose type implements the IEnumerable<T> interface or the IQueryable<T> interface. Standardowe operatory zapytań zapewniają możliwości zapytań, w tym filtrowanie, projekcję, agregację, sortowanie i inne.The standard query operators provide query capabilities including filtering, projection, aggregation, sorting and more.

Istnieją dwa zestawy operatorów standardowych zapytań LINQ, które działają na obiektach typu IEnumerable<T> i innych, które działają na obiektach typu. IQueryable<T>There are two sets of LINQ standard query operators, one that operates on objects of type IEnumerable<T> and the other that operates on objects of type IQueryable<T>. Metody, które składają się na każdy zestaw są statycznymi elementami Enumerable członkowskimi klas i Queryable , odpowiednio.The methods that make up each set are static members of the Enumerable and Queryable classes, respectively. Są one definiowane jako metody rozszerzające typ, na którym działają.They are defined as extension methods of the type that they operate on. Oznacza to, że można je wywołać za pomocą składni metody statycznej lub składni metody wystąpienia.This means that they can be called by using either static method syntax or instance method syntax.

Ponadto kilka metod standardowego operatora zapytań działa na typach innych niż te oparte na IEnumerable<T> lub. IQueryable<T>In addition, several standard query operator methods operate on types other than those based on IEnumerable<T> or IQueryable<T>. Typ definiuje dwie takie metody, które działają na obiektach typu IEnumerable. EnumerableThe Enumerable type defines two such methods that both operate on objects of type IEnumerable. Te metody Cast<TResult>(IEnumerable) i OfType<TResult>(IEnumerable)umożliwiają włączenie kolekcji niesparametryzowanej lub nieogólnej, w której będą wysyłane zapytania we wzorcu LINQ.These methods, Cast<TResult>(IEnumerable) and OfType<TResult>(IEnumerable), let you enable a non-parameterized, or non-generic, collection to be queried in the LINQ pattern. W tym celu należy utworzyć kolekcję obiektów o jednoznacznie określonym typie.They do this by creating a strongly-typed collection of objects. Klasa definiuje dwie podobne OfType<TResult>(IQueryable)metody, Cast<TResult>(IQueryable) które działają na obiektach typu Queryable. QueryableThe Queryable class defines two similar methods, Cast<TResult>(IQueryable) and OfType<TResult>(IQueryable), that operate on objects of type Queryable.

Standardowe operatory zapytań różnią się w czasie wykonywania, w zależności od tego, czy zwracają wartość singleton, czy sekwencję wartości.The standard query operators differ in the timing of their execution, depending on whether they return a singleton value or a sequence of values. Metody, które zwracają pojedyncze wartości (na przykład Average i Sum), wykonują od razu.Those methods that return a singleton value (for example, Average and Sum) execute immediately. Metody, które zwracają sekwencję, opóźniają wykonanie zapytania i zwracają wyliczalny obiekt.Methods that return a sequence defer the query execution and return an enumerable object.

W przypadku metod, które działają na kolekcjach w pamięci, czyli te metody, które przechodzą IEnumerable<T>, zwracany wyliczalny obiekt przechwytuje argumenty, które zostały przekazane do metody.In the case of the methods that operate on in-memory collections, that is, those methods that extend IEnumerable<T>, the returned enumerable object captures the arguments that were passed to the method. Po wyliczeniu tego obiektu jest stosowana logika operatora zapytania, a wyniki zapytania są zwracane.When that object is enumerated, the logic of the query operator is employed and the query results are returned.

W przeciwieństwie do metod, IQueryable<T> które zwiększają nie zaimplementować żadnego zachowania zapytania, ale kompiluje drzewo wyrażenia, które reprezentuje zapytanie, które ma zostać wykonane.In contrast, methods that extend IQueryable<T> do not implement any querying behavior, but build an expression tree that represents the query to be performed. Przetwarzanie zapytania jest obsługiwane przez obiekt źródłowy IQueryable<T> .The query processing is handled by the source IQueryable<T> object.

Wywołania metod zapytania można łączyć razem w jednym zapytaniu, co umożliwia zapełnienie zapytań.Calls to query methods can be chained together in one query, which enables queries to become arbitrarily complex.

Poniższy przykład kodu demonstruje, jak standardowe operatory zapytań mogą służyć do uzyskiwania informacji o sekwencji.The following code example demonstrates how the standard query operators can be used to obtain information about a sequence.

string sentence = "the quick brown fox jumps over the lazy dog";  
// Split the string into individual words to create a collection.  
string[] words = sentence.Split(' ');  
  
// Using query expression syntax.  
var query = from word in words  
            group word.ToUpper() by word.Length into gr  
            orderby gr.Key  
            select new { Length = gr.Key, Words = gr };  
  
// Using method-based query syntax.  
var query2 = words.  
    GroupBy(w => w.Length, w => w.ToUpper()).  
    Select(g => new { Length = g.Key, Words = g }).  
    OrderBy(o => o.Length);  
  
foreach (var obj in query)  
{  
    Console.WriteLine("Words of length {0}:", obj.Length);  
    foreach (string word in obj.Words)  
        Console.WriteLine(word);  
}  
  
// This code example produces the following output:  
//  
// Words of length 3:  
// THE  
// FOX  
// THE  
// DOG  
// Words of length 4:  
// OVER  
// LAZY  
// Words of length 5:  
// QUICK  
// BROWN  
// JUMPS   

Składnia wyrażenia zapytaniaQuery Expression Syntax

Niektóre często używane standardowe operatory zapytań mają dedykowaną C# składnię słowa kluczowego i Visual Basic języka, która umożliwia ich wywoływanie jako część wyrażenia zapytania .Some of the more frequently used standard query operators have dedicated C# and Visual Basic language keyword syntax that enables them to be called as part of a query expression. Aby uzyskać więcej informacji na temat standardowych operatorów zapytań, które mają dedykowane słowa kluczowe i ich odpowiednie składnie, zobacz składnia wyrażeń zapytaniaC#dla standardowych operatorów zapytań ().For more information about standard query operators that have dedicated keywords and their corresponding syntaxes, see Query Expression Syntax for Standard Query Operators (C#).

Rozszerzanie standardowych operatorów zapytańExtending the Standard Query Operators

Zestaw standardowych operatorów zapytań można rozszerzyć przez utworzenie metod specyficznych dla domeny, które są odpowiednie dla domeny docelowej lub technologii.You can augment the set of standard query operators by creating domain-specific methods that are appropriate for your target domain or technology. Możesz również zastąpić standardowe operatory zapytań własnymi implementacjami, które zapewniają dodatkowe usługi, takie jak Ocena zdalna, tłumaczenie zapytań i optymalizacja.You can also replace the standard query operators with your own implementations that provide additional services such as remote evaluation, query translation, and optimization. Zobacz AsEnumerable , aby zapoznać się z przykładem.See AsEnumerable for an example.

Poniższe linki prowadzą do tematów, które dostarczają dodatkowych informacji na temat różnych standardowych operatorów zapytań opartych na funkcjonalności.The following links take you to topics that provide additional information about the various standard query operators based on functionality.

Sortowanie danych (C#)Sorting Data (C#)

Operacje Set (C#)Set Operations (C#)

Filtrowanie danych (C#)Filtering Data (C#)

Operacje kwantyfikatora (C#)Quantifier Operations (C#)

Operacje projekcjiC#()Projection Operations (C#)

Partycjonowanie danychC#()Partitioning Data (C#)

Operacje join (C#)Join Operations (C#)

Grupowanie danych (C#)Grouping Data (C#)

Operacje generacji (C#)Generation Operations (C#)

Operacje równości (C#)Equality Operations (C#)

Operacje elementu (C#)Element Operations (C#)

Konwertowanie typów danych (C#)Converting Data Types (C#)

Operacje łączenia (C#)Concatenation Operations (C#)

Operacje agregacjiC#()Aggregation Operations (C#)

Zobacz takżeSee also