Klasyfikacja standardowych operatorów zapytań według sposobu wykonywania (Visual Basic)
Implementacje LINQ to Objects standardowych metod operatorów zapytań są wykonywane na jeden z dwóch głównych sposobów: natychmiastowe lub odroczone. Operatory zapytań korzystające z wykonania odroczonego można dodatkowo podzielić na dwie kategorie: przesyłanie strumieniowe i nieprzesyłania strumieniowego. Jeśli wiesz, jak są wykonywane różne operatory zapytań, może to ułatwić zrozumienie wyników uzyskanych z danego zapytania. Jest to szczególnie istotne w przypadku zmiany źródła danych lub tworzenia zapytania na podstawie innego zapytania. W tym temacie klasyfikuje standardowe operatory zapytań zgodnie z ich sposobem wykonywania.
Sposób wykonywania
Natychmiastowe
Natychmiastowe wykonanie oznacza, że źródło danych jest odczytywane, a operacja jest wykonywana w punkcie kodu, w którym jest zadeklarowane zapytanie. Wszystkie standardowe operatory zapytań, które natychmiast zwracają pojedynczy, nieliczalny wynik.
Odłożone
Odroczone wykonanie oznacza, że operacja nie jest wykonywana w punkcie w kodzie, w którym zadeklarowano zapytanie. Operacja jest wykonywana tylko wtedy, gdy zmienna kwerendy jest wyliczana, na przykład przy użyciu For Each
instrukcji . Oznacza to, że wyniki wykonywania zapytania zależą od zawartości źródła danych, gdy zapytanie jest wykonywane, a nie po zdefiniowaniu zapytania. Jeśli zmienna kwerendy jest wyliczana wiele razy, wyniki mogą się różnić za każdym razem. Prawie wszystkie standardowe operatory zapytań, których typ zwracany jest IEnumerable<T> lub IOrderedEnumerable<TElement> są wykonywane w sposób odroczony.
Operatory zapytań używające wykonywania odroczonego mogą być dodatkowo klasyfikowane jako przesyłanie strumieniowe lub nie przesyłane strumieniowo.
Przesyłanie strumieniowe
Operatory przesyłania strumieniowego nie muszą odczytywać wszystkich danych źródłowych przed uzyskaniem elementów. W momencie wykonywania operator przesyłania strumieniowego wykonuje operację na każdym elemecie źródłowym, ponieważ jest odczytywany i zwraca element, jeśli jest to odpowiednie. Operator przesyłania strumieniowego nadal odczytuje elementy źródłowe do momentu utworzenia elementu wyniku. Oznacza to, że w celu wygenerowania jednego elementu wyniku może zostać odczytany więcej niż jeden element źródłowy.
Przesyłanie strumieniowe bez przesyłania strumieniowego
Operatory nieprzesyłania strumieniowego muszą odczytywać wszystkie dane źródłowe, zanim będą mogły uzyskać element wyniku. Operacje, takie jak sortowanie lub grupowanie, należą do tej kategorii. W czasie wykonywania operatory zapytań spoza przesyłania strumieniowego odczytują wszystkie dane źródłowe, umieszczają je w strukturze danych, wykonują operację i dają wynikowe elementy.
Tabela klasyfikacji
Poniższa tabela klasyfikuje każdą standardową metodę operatora zapytania zgodnie z metodą wykonywania.
Uwaga
Jeśli operator jest oznaczony w dwóch kolumnach, dwie sekwencje wejściowe są zaangażowane w operację, a każda sekwencja jest oceniana inaczej. W takich przypadkach jest to zawsze pierwsza sekwencja na liście parametrów, która jest obliczana w sposób odroczony, przesyłany strumieniowo.