Dela via


Vanliga frågeoperatorer i LINQ till entitetsfrågor

I en fråga anger du den information som du vill hämta från datakällan. En fråga kan också ange hur den informationen ska sorteras, grupperas och formas innan den returneras. LINQ innehåller en uppsättning standardfrågemetoder som du kan använda i en fråga. De flesta av dessa metoder fungerar på sekvenser; I det här sammanhanget är en sekvens ett objekt vars typ implementerar IEnumerable<T> gränssnittet eller IQueryable<T> gränssnittet. Frågefunktionerna för vanliga frågeoperatorer omfattar filtrering, projektion, aggregering, sortering, gruppering, växling med mera. Några av de vanligare standardfrågeoperatorerna har dedikerad nyckelordssyntax så att de kan anropas med hjälp av frågeuttryckssyntax. Ett frågeuttryck är ett annat, mer läsbart sätt att uttrycka en fråga än den metodbaserade motsvarigheten. Frågeuttryckssatser översätts till anrop till frågemetoderna vid kompileringstillfället. En lista över standardfrågeoperatorer som har motsvarande frågeuttryckssatser finns i Översikt över vanliga frågeoperatorer.

Alla standardfrågeoperatorer stöds inte i LINQ till entitetsfrågor. Mer information finns i LINQ-metoder som stöds och inte stöds (LINQ till entiteter). Det här avsnittet innehåller information om de vanliga frågeoperatorer som är specifika för LINQ för entiteter. Mer information om kända problem i LINQ till entitetsfrågor finns i Kända problem och överväganden i LINQ till entiteter.

Metoder för projektion och filtrering

Projektion syftar på att omvandla elementen i en resultatuppsättning till ett önskat formulär. Du kan till exempel projicera en delmängd av de egenskaper som du behöver från varje objekt i resultatuppsättningen, du kan projicera en egenskap och utföra en matematisk beräkning på den, eller så kan du projicera hela objektet från resultatuppsättningen. Projektionsmetoderna är Select och SelectMany.

Filtrering syftar på att begränsa resultatuppsättningen till att endast innehålla de element som matchar ett angivet villkor. Filtreringsmetoden är Where.

De flesta överlagringar av projektions- och filtreringsmetoderna stöds i LINQ till entiteter, med undantag för dem som accepterar ett positionsargument.

Kopplingsmetoder

Anslutning är en viktig åtgärd i frågor som riktar sig till datakällor som inte har några navigeringsbara relationer till varandra. En koppling mellan två datakällor är associationen mellan objekt i en datakälla och objekt i den andra datakällan som delar ett gemensamt attribut eller en gemensam egenskap. Kopplingsmetoderna är Join och GroupJoin.

De flesta överlagringar av kopplingsmetoderna stöds, med undantag för dem som använder en IEqualityComparer<T>. Det beror på att jämförelsen inte kan översättas till datakällan.

Ange metoder

Ange åtgärder i LINQ är frågeåtgärder som baserar sina resultatuppsättningar på förekomsten eller frånvaron av motsvarande element inom samma eller i en annan samling (eller uppsättning). Uppsättningsmetoderna är All, Any, Concat, Contains, DefaultIfEmpty, Distinct, , ExceptEqualAll, , Intersectoch Union.

De flesta överlagringar av de angivna metoderna stöds i LINQ till entiteter, även om det finns vissa skillnader i beteende jämfört med LINQ till objekt. Du kan dock inte ange metoder som använder en IEqualityComparer<T> eftersom jämförelsen inte kan översättas till datakällan.

Beställningsmetoder

Ordning, eller sortering, refererar till ordningen på elementen i en resultatuppsättning baserat på ett eller flera attribut. Genom att ange mer än ett sorteringsvillkor kan du bryta banden i en grupp.

De flesta överlagringar av beställningsmetoderna stöds, med undantag för dem som använder en IComparer<T>. Det beror på att jämförelsen inte kan översättas till datakällan. Beställningsmetoderna är OrderBy, OrderByDescending, ThenBy, ThenByDescendingoch Reverse.

Eftersom frågan körs på datakällan kan ordningsbeteendet skilja sig från frågor som körs i CLR. Det beror på att beställningsalternativ, till exempel ärendeordning, kanjiordning och nullordning, kan anges i datakällan. Beroende på datakällan kan dessa sorteringsalternativ ge andra resultat än i CLR.

Om du anger samma nyckelväljare i mer än en beställningsåtgärd skapas en dubblettordning. Detta är inte giltigt och ett undantag genereras.

Grupperingsmetoder

Gruppering syftar på att placera data i grupper så att elementen i varje grupp delar ett gemensamt attribut. Grupperingsmetoden är GroupBy.

De flesta överlagringar av grupperingsmetoderna stöds, med undantag för dem som använder en IEqualityComparer<T>. Det beror på att jämförelsen inte kan översättas till datakällan.

Grupperingsmetoderna mappas till datakällan med en distinkt underfråga för nyckelväljaren. Underfrågan om jämförelse av nyckelväljare körs med hjälp av datakällans semantik, inklusive problem som rör jämförelse av null värden.

Aggregerade metoder

En aggregeringsåtgärd beräknar ett enda värde från en samling värden. Till exempel är beräkningen av den genomsnittliga dagliga temperaturen från en månads värden för daglig temperatur en aggregeringsåtgärd. Aggregeringsmetoderna är Aggregate, Average, Count, LongCount, Max, Minoch Sum.

De flesta överlagringar av aggregerade metoder stöds. För beteende som rör null-värden använder aggregeringsmetoderna datakällans semantik. Beteendet för aggregeringsmetoderna när nullvärden ingår kan vara annorlunda, beroende på vilken serverdelsdatakälla som används. Aggregerat metodbeteende med hjälp av datakällans semantik kan också skilja sig från vad som förväntas från CLR-metoder. Standardbeteendet för Sum metoden på SQL Server är till exempel att ignorera null-värden i stället för att utlösa ett undantag.

Alla undantag som uppstår till följd av aggregering, till exempel ett spill från Sum funktionen, genereras som undantag för datakällan eller Entity Framework-undantag under materialiseringen av frågeresultatet.

För de metoder som omfattar en beräkning över en sekvens, till exempel Sum eller Average, utförs den faktiska beräkningen på servern. Därför kan typkonverteringar och förlust av precision inträffa på servern, och resultatet kan skilja sig från vad som förväntas med hjälp av CLR-semantik.

Standardbeteendet för aggregeringsmetoderna för null-/icke-null-värden visas i följande tabell:

Metod Inga data Alla null-värden Vissa null-värden Inga null-värden
Average Returnerar null. Returnerar null. Returnerar medelvärdet av icke-null-värdena i en sekvens. Beräknar medelvärdet av en sekvens med numeriska värden.
Count Returnerar 0 Returnerar antalet null-värden i sekvensen. Returnerar antalet null- och icke-null-värden i sekvensen. Returnerar antalet element i sekvensen.
Max Returnerar null. Returnerar null. Returnerar det maximala värdet som inte är null i en sekvens. Returnerar det maximala värdet i en sekvens.
Min Returnerar null. Returnerar null. Returnerar det minsta icke-null-värdet i en sekvens. Returnerar minimivärdet i en sekvens.
Sum Returnerar null. Returnerar null. Returnerar summan av värdet som inte är null i en sekvens. Beräknar summan av en sekvens med numeriska värden.

Typmetoder

De två LINQ-metoderna som hanterar typkonvertering och testning stöds båda i kontexten för Entity Framework. Det innebär att de enda typer som stöds är typer som mappas till lämplig Entity Framework-typ. En lista över dessa typer finns i Konceptuella modelltyper (CSDL). Typmetoderna är Convert och OfType.

OfType stöds för entitetstyper. Convert stöds för konceptuella modell primitiva typer. C# is och as metoder stöds också.

Växlingsmetoder

Växlingsåtgärder returnerar ett enskilt element eller flera element från en sekvens. De växlingsmetoder som stöds är First, FirstOrDefault, Single, SingleOrDefault, Skipoch Take.

Ett antal växlingsmetoder stöds inte, antingen på grund av att det inte går att mappa funktioner till datakällan eller på grund av att det inte finns någon implicit ordning på uppsättningar i datakällan. Metoder som returnerar ett standardvärde är begränsade till konceptuella modell primitiva typer och referenstyper med null-standardvärden. Växlingsmetoder som körs i en tom sekvens returnerar null.

Se även