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: , AnyConcat, Contains, DefaultIfEmpty, Distinct, EqualAll, ExceptIntersect, é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, ThenByThenByDescendingé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: , CountAverage, 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.

Lásd még