Standard lekérdezési operátorok a LINQ-ban entitások lekérdezéseihez
Egy lekérdezésben meg kell adnia az adatforrásból lekérni kívánt adatokat. A lekérdezések azt is megadhatja, hogy az adatok hogyan legyenek rendezve, csoportosítva és formázva a visszaadása előtt. A LINQ a lekérdezésekben használható szabványos lekérdezési módszerek készletét biztosítja. Ezeknek a módszereknek a többsége szekvenciákon működik; ebben a kontextusban a sorozat olyan objektum, amelynek típusa implementálja az IEnumerable<T> interfészt vagy az interfészt IQueryable<T> . A szabványos lekérdezési operátorok lekérdezési funkciói közé tartozik a szűrés, a kivetítés, az összesítés, a rendezés, a csoportosítás, a lapozás stb. A gyakran használt standard lekérdezési operátorok némelyike dedikált kulcsszószintaxissal rendelkezik, így a lekérdezési kifejezés szintaxisával hívhatók meg. A lekérdezési kifejezések más, olvashatóbb módon fejezik ki a lekérdezéseket, mint a metódusalapú megfelelők. A lekérdezési kifejezések záradékai fordításkor a lekérdezési metódusok hívásaiká lesznek lefordítva. Az egyenértékű lekérdezési kifejezési záradékokkal rendelkező szabványos lekérdezési operátorok listáját a Standard lekérdezési operátorok áttekintése című témakörben találja.
A LINQ nem minden szabványos lekérdezési operátort támogat az Entitások lekérdezések esetében. További információ: Támogatott és nem támogatott LINQ-metódusok (LINQ az entitásokhoz). Ez a témakör az entitásokra vonatkozó LINQ-ra jellemző szabványos lekérdezési operátorokról nyújt tájékoztatást. A LINQ entitások lekérdezéseinek ismert problémáival kapcsolatos további információkért lásd a LINQ entitásokra vonatkozó ismert problémáit és szempontjait.
Vetítési és szűrési módszerek
A kivetítés az eredményhalmaz elemeinek kívánt formává alakítását jelenti. Kivetítheti például a szükséges tulajdonságok egy részét az eredményhalmaz egyes objektumaiból, kivetíthet egy tulajdonságot, és matematikai számítást végezhet rajta, vagy kivetítheti a teljes objektumot az eredményhalmazból. A vetítési módszerek a következők Select
: és SelectMany
.
A szűrés azt a műveletet jelenti, amely szerint az eredményhalmaz csak azokat az elemeket tartalmazza, amelyek megfelelnek egy adott feltételnek. A szűrési módszer a következő Where
: .
A kivetítési és szűrési módszerek legtöbb túlterhelését a LINQ támogatja az entitásokra, kivéve azokat, amelyek elfogadnak egy pozícióargumentumot.
Illesztési módszerek
A csatlakozás olyan lekérdezések fontos művelete, amelyek olyan adatforrásokat céloznak meg, amelyek nem rendelkeznek egymással navigálásra alkalmas kapcsolatokkal. Két adatforrás összekapcsolása az egyik adatforrás objektumainak társítása a másik adatforrásban lévő objektumokkal, amelyek közös attribútumot vagy tulajdonságot használnak. Az illesztési metódusok a következők Join
: és GroupJoin
.
Az illesztési módszerek legtöbb túlterhelése támogatott, kivéve azokat, amelyek IEqualityComparer<T>a . Ennek az az oka, hogy a összehasonlító nem fordítható le az adatforrásra.
Metódusok beállítása
A LINQ-ban a beállítási műveletek olyan lekérdezési műveletek, amelyek eredményhalmazaikat az azonos vagy egy másik gyűjteményben (vagy készletben) lévő egyenértékű elemek jelenlétére vagy hiányára alapozza. A megadott metódusok a következőkAll
: , Any
Concat
, Contains
, DefaultIfEmpty
, Distinct
, EqualAll
, Except
Intersect
, és Union
.
A halmaz metódusainak legtöbb túlterhelése támogatott a LINQ-ban az Entitások között, bár a LINQ és az objektumok viselkedése között van némi különbség. Az olyan IEqualityComparer<T> metódusok beállítása azonban nem támogatott, amelyek nem használhatók, mert a összehasonlító nem fordítható le az adatforrásra.
Rendezési módszerek
A rendezés vagy rendezés az eredményhalmaz elemeinek egy vagy több attribútum alapján történő rendezésére utal. Egynél több rendezési feltétel megadásával megszakíthatja a csoporton belüli kötelékeket.
A rendezési módszerek legtöbb túlterhelése támogatott, kivéve azokat, amelyek egy IComparer<T>. Ennek az az oka, hogy a összehasonlító nem fordítható le az adatforrásra. A rendezési módszerek a következőkOrderBy
: , OrderByDescending
, ThenBy
ThenByDescending
és Reverse
.
Mivel a lekérdezés az adatforráson van végrehajtva, a rendezési viselkedés eltérhet a CLR-ben végrehajtott lekérdezésektől. Ennek az az oka, hogy az adatforrásban megadhatók a rendezési beállítások, például a kis- és nagybetűk sorrendje, valamint a null sorrend. Az adatforrástól függően ezek a rendezési lehetőségek eltérő eredményeket eredményezhetnek, mint a CLR-ben.
Ha ugyanazt a kulcsválasztót több rendelési műveletben is megadja, a rendszer ismétlődő sorrendet hoz létre. Ez érvénytelen, és a rendszer kivételt küld.
Csoportosítási módszerek
A csoportosítás az adatok csoportokba helyezését jelenti, hogy az egyes csoportok elemei közös attribútummal rendelkezhessenek. A csoportosítási módszer a következő GroupBy
: .
A csoportosítási módszerek legtöbb túlterhelése támogatott, kivéve azokat, amelyek egy IEqualityComparer<T>. Ennek az az oka, hogy a összehasonlító nem fordítható le az adatforrásra.
A csoportosítási módszerek az adatforráshoz vannak leképezve egy külön allekérdezéssel a kulcsválasztóhoz. A fő választó összehasonlítási al lekérdezése az adatforrás szemantikájának használatával történik, beleértve az értékek összehasonlításával null
kapcsolatos problémákat is.
Összesítő metódusok
Az összesítési művelet egyetlen értéket számít ki egy értékgyűjteményből. Például a napi átlaghőmérséklet kiszámítása egy hónap napi hőmérsékleti értékéből egy összesítési művelet. Az összesítő metódusok a következőkAggregate
: , Count
Average
, LongCount
, Max
, Min
és Sum
.
Az összesítő metódusok legtöbb túlterhelése támogatott. A null értékekkel kapcsolatos viselkedéshez az összesítő metódusok az adatforrás szemantikáját használják. A null értékeket tartalmazó összesítési metódusok viselkedése eltérő lehet attól függően, hogy melyik háttéradatforrást használják. Az adatforrás szemantikáját használó összesítő metódus viselkedése szintén eltérhet a CLR-metódusoktól elvárttól. Az SQL Server metódusának alapértelmezett viselkedése például az Sum
, hogy kivétel helyett figyelmen kívül hagyja a null értékeket.
Az összesítésből eredő kivételek, például a Sum
függvény túlcsordulása, adatforrás-kivételekként vagy Entity Framework-kivételekként jelennek meg a lekérdezési eredmények materializálása során.
Azoknál a metódusoknál, amelyek sorozaton keresztül végeznek számítást, például Sum
vagy Average
, a tényleges számítás a kiszolgálón történik. Ennek eredményeképpen típuskonverziók és pontosságvesztés fordulhat elő a kiszolgálón, és az eredmények eltérhetnek a CLR szemantikával várttól.
A null/nem null értékek összesített metódusainak alapértelmezett viselkedése az alábbi táblázatban látható:
Metódus | Nincs adat | Minden null érték | Néhány null érték | Nincs null érték |
---|---|---|---|---|
Average |
Null értéket ad vissza. | Null értéket ad vissza. | Egy sorozat nem null értékeinek átlagát adja eredményül. | Numerikus értékek sorozatának átlagát számítja ki. |
Count |
0 értéket ad vissza | A sorozat null értékeinek számát adja vissza. | A sorozat null és nem null értékeinek számát adja eredményül. | A sorozat elemeinek számát adja vissza. |
Max |
Null értéket ad vissza. | Null értéket ad vissza. | Egy sorozatban a maximális nem null értéket adja eredményül. | Egy sorozat maximális értékét adja vissza. |
Min |
Null értéket ad vissza. | Null értéket ad vissza. | A sorozat minimális nem null értékű értékét adja eredményül. | A sorozat minimális értékét adja vissza. |
Sum |
Null értéket ad vissza. | Null értéket ad vissza. | A nem null érték összegét adja eredményül egy sorozatban. | Numerikus értékek sorozatának összegét számítja ki. |
Típusmódszerek
A típuskonvertálással és teszteléssel foglalkozó két LINQ-metódus egyaránt támogatott az Entity Framework kontextusában. Ez azt jelenti, hogy az egyetlen támogatott típus olyan típus, amely megfelel a megfelelő Entity Framework-típusnak. Ezeknek a típusoknak a listáját a fogalmi modelltípusok (CSDL) című témakörben találja. A típusmetelyek a következők Convert
: és OfType
.
OfType
entitástípusok esetén támogatott. Convert
a fogalmi modell primitív típusai esetében támogatott. A C# is
és as
a metódusok is támogatottak.
Lapozási módszerek
A lapozási műveletek egyetlen vagy több elemet adnak vissza egy sorozatból. A támogatott lapozási módszerek a következők First
: , FirstOrDefault
, Single
, SingleOrDefault
, Skip
és Take
.
Számos lapozási módszer nem támogatott, mert vagy nem lehet függvényeket leképezni az adatforráshoz, vagy azért, mert nem lehet implicit sorrendbe rendezni a készleteket az adatforráson. Az alapértelmezett értéket visszaadó metódusok a fogalmi modell primitív típusaira és a null alapértelmezésű referenciatípusokra korlátozódnak. Az üres sorozaton végrehajtott lapozási metódusok null értéket adnak vissza.