Udostępnij za pośrednictwem


Standardowe operatory zapytań w zapytaniach składnika LINQ to Entities

W zapytaniu należy określić informacje, które mają zostać pobrane ze źródła danych. Zapytanie może również określać sposób sortowania, grupowania i kształtowania informacji przed ich zwróceniem. LINQ udostępnia zestaw standardowych metod zapytań, których można użyć w zapytaniu. Większość z tych metod działa na sekwencjach; w tym kontekście sekwencja jest obiektem, którego typ implementuje IEnumerable<T> interfejs lub IQueryable<T> interfejs. Standardowe operatory zapytań obejmują filtrowanie, projekcję, agregację, sortowanie, grupowanie, stronicowanie i nie tylko. Niektóre z najczęściej używanych standardowych operatorów zapytań mają dedykowaną składnię słowa kluczowego, dzięki czemu można je wywoływać przy użyciu składni wyrażeń zapytania. Wyrażenie zapytania to inny, bardziej czytelny sposób wyrażania zapytania niż równoważnik oparty na metodzie. Klauzule wyrażenia zapytania są tłumaczone na wywołania metod zapytań w czasie kompilacji. Aby uzyskać listę standardowych operatorów zapytań, które mają równoważne klauzule wyrażenia zapytania, zobacz Standardowe operatory zapytań — omówienie.

Nie wszystkie standardowe operatory zapytań są obsługiwane w zapytaniach LINQ to Entities. Aby uzyskać więcej informacji, zobacz Obsługiwane i nieobsługiwane metody LINQ (LINQ to Entities). Ten temat zawiera informacje o standardowych operatorach zapytań specyficznych dla linQ to Entities. Aby uzyskać więcej informacji na temat znanych problemów w zapytaniach LINQ to Entities, zobacz Znane problemy i zagadnienia dotyczące jednostek LINQ to Entities.

Metody projekcji i filtrowania

Projekcja odnosi się do przekształcania elementów zestawu wyników w żądaną formę. Na przykład można projektować podzestaw właściwości potrzebnych z każdego obiektu w zestawie wyników, można projektować właściwość i wykonywać na niej obliczenia matematyczne lub projektować cały obiekt z zestawu wyników. Metody projekcji to Select i SelectMany.

Filtrowanie odwołuje się do operacji ograniczania zestawu wyników tak, aby zawierała tylko te elementy, które pasują do określonego warunku. Metoda filtrowania to Where.

Większość przeciążeń metod projekcji i filtrowania jest obsługiwana w linQ to Entities, z wyjątkiem tych, które akceptują argument pozycyjny.

Metody sprzężenia

Łączenie jest ważną operacją w zapytaniach przeznaczonych dla źródeł danych, które nie mają relacji nawigowalnych ze sobą. Sprzężenie dwóch źródeł danych to skojarzenie obiektów w jednym źródle danych z obiektami w drugim źródle danych, które współużytkuje wspólny atrybut lub właściwość. Metody sprzężenia to Join i GroupJoin.

Większość przeciążeń metod sprzężenia jest obsługiwana, z wyjątkiem tych, które używają klasy IEqualityComparer<T>. Dzieje się tak, ponieważ nie można przetłumaczyć porównania na źródło danych.

Ustaw metody

Operacje ustawiania w LINQ to operacje zapytań, które bazują na ich zestawach wyników w obecności lub braku równoważnych elementów w ramach tej samej lub w innej kolekcji (lub zestawie). Metody zestawu to All, DefaultIfEmptyContainsConcatAnyEqualAllExceptDistinct, Intersecti .Union

Większość przeciążeń metod zestawu jest obsługiwana w linQ to Entities, chociaż istnieją pewne różnice w zachowaniu w porównaniu z LINQ to Objects. Jednak metody używające elementu IEqualityComparer<T> nie są obsługiwane, ponieważ nie można przetłumaczyć porównywacza na źródło danych.

Metody porządkowania

Porządkowanie lub sortowanie odnosi się do porządkowania elementów zestawu wyników na podstawie co najmniej jednego atrybutu. Określając więcej niż jedno kryterium sortowania, można przerwać powiązania w grupie.

Większość przeciążeń metod porządkowania jest obsługiwana, z wyjątkiem tych, które używają klasy IComparer<T>. Dzieje się tak, ponieważ nie można przetłumaczyć porównania na źródło danych. Metody porządkowania to OrderBy, , OrderByDescendingThenBy, ThenByDescending, i Reverse.

Ponieważ zapytanie jest wykonywane w źródle danych, zachowanie porządkowania może różnić się od zapytań wykonywanych w środowisku CLR. Dzieje się tak, ponieważ w źródle danych można ustawić opcje porządkowania, takie jak kolejność przypadków, kolejność kanji i kolejność o wartości null. W zależności od źródła danych te opcje zamawiania mogą generować inne wyniki niż w środowisku CLR.

Jeśli określisz ten sam selektor kluczy w więcej niż jednej operacji porządkowania, zostanie wygenerowane zduplikowane zamówienie. Jest to nieprawidłowe i zostanie zgłoszony wyjątek.

Metody grupowania

Grupowanie odnosi się do umieszczania danych w grupach, aby elementy w każdej grupie współużytkować wspólny atrybut. Metoda grupowania to GroupBy.

Większość przeciążeń metod grupowania jest obsługiwana, z wyjątkiem tych, które używają metody IEqualityComparer<T>. Dzieje się tak, ponieważ nie można przetłumaczyć porównania na źródło danych.

Metody grupowania są mapowane do źródła danych przy użyciu odrębnego podrzędnego zapytania dla selektora kluczy. Zapytanie podrzędne porównania selektora kluczy jest wykonywane przy użyciu semantyki źródła danych, w tym problemów związanych z porównywaniem null wartości.

Metody agregacji

Operacja agregacji oblicza pojedynczą wartość z kolekcji wartości. Na przykład obliczanie średniej dziennej temperatury z wartości dziennej wartości miesięcznej temperatury jest operacją agregacji. Metody agregacji to Aggregate, , Average, CountLongCount, Max, Min, i Sum.

Większość przeciążeń metod agregacji jest obsługiwana. W przypadku zachowania związanego z wartościami null metody agregacji używają semantyki źródła danych. Zachowanie metod agregacji, gdy są używane wartości null, może się różnić w zależności od używanego źródła danych zaplecza. Zachowanie metody agregacji przy użyciu semantyki źródła danych może również różnić się od tego, czego oczekuje się od metod CLR. Na przykład domyślne zachowanie Sum metody w programie SQL Server polega na ignorowaniu wszystkich wartości null zamiast zgłaszania wyjątku.

Wszelkie wyjątki wynikające z agregacji, takie jak przepełnienie z Sum funkcji, są zgłaszane jako wyjątki źródła danych lub wyjątki programu Entity Framework podczas materializacji wyników zapytania.

W przypadku tych metod, które obejmują obliczenia w sekwencji, takiej jak Sum lub Average, rzeczywiste obliczenie jest wykonywane na serwerze. W związku z tym konwersje typów i utrata precyzji mogą wystąpić na serwerze, a wyniki mogą się różnić od oczekiwanej przy użyciu semantyki CLR.

Domyślne zachowanie metod agregacji dla wartości null/innych niż null jest pokazane w poniższej tabeli:

Method Brak danych Wszystkie wartości null Niektóre wartości null Brak wartości null
Average Zwraca wartość null. Zwraca wartość null. Zwraca średnią wartości innych niż null w sekwencji. Oblicza średnią sekwencji wartości liczbowych.
Count Zwraca wartość 0 Zwraca liczbę wartości null w sekwencji. Zwraca liczbę wartości null i innych niż null w sekwencji. Zwraca liczbę elementów w sekwencji.
Max Zwraca wartość null. Zwraca wartość null. Zwraca maksymalną wartość inną niż null w sekwencji. Zwraca wartość maksymalną w sekwencji.
Min Zwraca wartość null. Zwraca wartość null. Zwraca minimalną wartość inną niż null w sekwencji. Zwraca wartość minimalną w sekwencji.
Sum Zwraca wartość null. Zwraca wartość null. Zwraca sumę wartości innej niż null w sekwencji. Oblicza sumę sekwencji wartości liczbowych.

Metody typów

Dwie metody LINQ, które zajmują się konwersją typów i testowaniem, są obsługiwane w kontekście platformy Entity Framework. Oznacza to, że jedynymi obsługiwanymi typami są typy mapowane na odpowiedni typ programu Entity Framework. Aby uzyskać listę tych typów, zobacz Typy modeli koncepcyjnych (CSDL). Metody typów to Convert i OfType.

OfType jest obsługiwany w przypadku typów jednostek. Convert jest obsługiwany w przypadku typów pierwotnych modelu koncepcyjnego. Obsługiwane są również metody i as języka C#is.

Metody stronicowania

Operacje stronicowania zwracają jeden element lub wiele elementów z sekwencji. Obsługiwane metody stronicowania to First, , FirstOrDefault, SingleOrDefaultSingle, , Skipi Take.

Wiele metod stronicowania nie jest obsługiwanych ze względu na brak możliwości mapowania funkcji na źródło danych lub brak niejawnego porządkowania zestawów w źródle danych. Metody zwracające wartość domyślną są ograniczone do typów pierwotnych modelu koncepcyjnego i typów referencyjnych z wartościami domyślnymi o wartości null. Metody stronicowania wykonywane w pustej sekwencji będą zwracać wartość null.

Zobacz też