LINQ –entitások

A LINQ to Entityes nyelvvel integrált lekérdezési (LINQ) támogatást nyújt, amely lehetővé teszi a fejlesztők számára, hogy lekérdezéseket írjanak az Entity Framework elméleti modelljére a Visual Basic vagy a Visual C# használatával. Az Entity Framework-lekérdezéseket parancsfa-lekérdezések jelölik, amelyek az objektumkörnyezeten futnak. A LINQ entitásokká alakítja a nyelvvel integrált lekérdezéseket (LINQ) parancsfa-lekérdezésekké, végrehajtja a lekérdezéseket az Entity Frameworken, és visszaadja az entitás-keretrendszer és a LINQ által egyaránt használható objektumokat. A linq to Entities lekérdezés létrehozásának és végrehajtásának folyamata a következő:

  1. Hozzon létre egy példányt ObjectQuery<T> a forrásból ObjectContext.

  2. Linq to Entities lekérdezés írása C# vagy Visual Basic nyelven a ObjectQuery<T> példány használatával.

  3. A LINQ standard lekérdezési operátorait és kifejezéseit parancsfákká alakíthatja.

  4. Hajtsa végre a lekérdezést a parancsfa-ábrázolásban az adatforráson. A végrehajtás során az adatforrásra vonatkozó kivételek közvetlenül az ügyfélnek lesznek átadva.

  5. Lekérdezési eredményeket ad vissza az ügyfélnek.

ObjectQuery-példány létrehozása

Az ObjectQuery<T> általános osztály egy olyan lekérdezést jelöl, amely nulla vagy több beírt entitás gyűjteményét adja vissza. Az objektum-lekérdezések általában egy meglévő objektumkörnyezetből épülnek fel ahelyett, hogy manuálisan épülnek fel, és mindig az adott objektumkörnyezethez tartoznak. Ez a környezet a lekérdezés létrehozásához és végrehajtásához szükséges kapcsolati és metaadat-információkat tartalmazza. Az ObjectQuery<T> általános osztály implementálja az IQueryable<T> általános felületet, amelynek szerkesztőmetszetei lehetővé teszik a LINQ-lekérdezések növekményes kiépítését. Azt is lehetővé teheti, hogy a fordító az entitások típusát a C# var kulcsszóvalDim (a Visual Basicben, a helyi típus következtetésének engedélyezésével) tudja kikövetkeztetni.

A lekérdezések írása

Az általános IQueryable<T> felületet megvalósító általános osztály példányai ObjectQuery<T> adatforrásként szolgálnak a LINQ entitások lekérdezéseihez. Egy lekérdezésben pontosan meg kell adnia az adatforrásból lekérni kívánt információkat. 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-ban a lekérdezések egy változóban lesznek tárolva. Ez a lekérdezési változó nem hajt végre műveletet, és nem ad vissza adatokat; csak a lekérdezési adatokat tárolja. A lekérdezés létrehozása után végre kell hajtania a lekérdezést az adatok lekéréséhez.

A LINQ–Entitások lekérdezések két különböző szintaxisban állíthatók össze: a lekérdezési kifejezés szintaxisa és a metódusalapú lekérdezési szintaxis. A lekérdezési kifejezés szintaxisa és a metódusalapú lekérdezési szintaxis a C# 3.0 és a Visual Basic 9.0 újdonságai.

További információ: Lekérdezések a LINQ-ban entitások között.

Lekérdezés konvertálása

Ha linq-lekérdezést szeretne végrehajtani az entitás-keretrendszeren, a LINQ-lekérdezést parancsfa-ábrázolássá kell konvertálni, amely végrehajtható az entitás-keretrendszeren.

A LINQ–Entitások lekérdezések LINQ szabványos lekérdezési operátorokból (például Select, Whereés GroupBy) és kifejezésekből (x > 10, Contact.LastName stb.) állnak. A LINQ-operátorokat nem egy osztály határozza meg, hanem egy osztály metódusai. A LINQ-ban a kifejezések tartalmazhatnak bármit, amit a System.Linq.Expressions névtéren belüli típusok megengedhetnek, és bővítményként bármit, ami egy lambda függvényben ábrázolható. Ez az entitás-keretrendszer által engedélyezett kifejezések szuperhalmaza, amelyek definíciójuk szerint az adatbázison engedélyezett és az adatbázis által ObjectQuery<T>támogatott műveletekre korlátozódnak.

Az Entity Frameworkben az operátorokat és a kifejezéseket egyetlen típushierarchia képviseli, amely ezután egy parancsfába kerül. A parancsfát az Entity Framework használja a lekérdezés végrehajtásához. Ha a LINQ-lekérdezés nem fejezhető ki parancsfaként, a lekérdezés konvertálása kivételt fog eredményezni. A LINQ entitásokra való konvertálása két részkonvertálást foglal magában: a szabványos lekérdezési operátorok konvertálását és a kifejezések konvertálását.

Számos szabványos LINQ-lekérdezési operátor van, amelyek nem rendelkeznek érvényes linq-fordítással az entitásokra. Az operátorok használatára tett kísérletek kivételt eredményeznek a lekérdezésfordítás idején. Az entitások számára támogatott LINQ-operátorok listáját a támogatott és nem támogatott LINQ-metódusok (LINQ az entitások között) című témakörben találja.

A LINQ standard lekérdezési operátorainak entitásokra való használatával kapcsolatos további információkért lásd : Standard lekérdezési operátorok a LINQ-ban az entitások lekérdezései között.

A LINQ-entitások kifejezéseinek kiértékelése általában a kiszolgálón történik, ezért a kifejezés viselkedése nem várható el a CLR szemantikájának követésétől. További információ: Kifejezések a LINQ-ban entitáslekérdezések között.

További információ arról, hogy a CLR-metódushívások hogyan vannak leképezve az adatforrásban található canonikus függvényekre, lásd a CLR metódust a canonical function mappinghez.

További információ arról, hogyan hívhat meg canonical, database és custom függvényeket a LINQ-ból az Entitások lekérdezésekbe: Függvények hívása a LINQ-ban entitáslekérdezéseknek.

Lekérdezés végrehajtása

Miután a LINQ-lekérdezést a felhasználó létrehozta, a rendszer átalakítja egy olyan reprezentációvá, amely kompatibilis az Entity Frameworkdel (parancsfák formájában), amelyet aztán végrehajt az adatforráson. A lekérdezés végrehajtásakor a rendszer az összes lekérdezési kifejezést (vagy a lekérdezés összetevőit) kiértékeli az ügyfélen vagy a kiszolgálón. Ide tartoznak az eredmény-materializálásban vagy entitásvetítésekben használt kifejezések. További információ: Lekérdezés végrehajtása. Ha tudni szeretné, hogyan javíthatja a teljesítményt egy lekérdezés egyszer történő összeállításával, majd többszöri különböző paraméterekkel való végrehajtásával, tekintse meg a lefordított lekérdezéseket (LINQ to Entities) ismertető témakört.

Anyagosítás

A materializálás az a folyamat, amely a lekérdezési eredményeket CLR-típusokként adja vissza az ügyfélnek. A LINQ-ban az entitások között a lekérdezési eredmények adatrekordjai soha nem lesznek visszaadva; mindig van egy háttérbeli CLR-típus, amelyet a felhasználó vagy az Entity Framework határoz meg, vagy amelyet a fordító hoz létre (névtelen típusok). Minden objektum-materializálást az Entity Framework hajt végre. Az entitás-keretrendszer és a CLR közötti leképezés sikertelenségéből eredő hibák kivételeket okoznak az objektum materializálása során.

A lekérdezési eredmények általában a következők egyikeként jelennek meg:

  • Nulla vagy több típusú entitásobjektum gyűjteménye, vagy a koncepciómodellben definiált összetett típusok vetülete.

  • Az Entity Framework által támogatott CLR-típusok.

  • Beágyazott gyűjtemények.

  • Névtelen típusok.

További információ: Lekérdezési eredmények.

A szakasz tartalma

Lekérdezések a LINQ-ban az entitásokhoz

Kifejezések a LINQ-ban entitások lekérdezéseihez

Függvények meghívása a LINQ-ban entitáslekérdezésekre

Lefordított lekérdezések (LINQ az entitásokhoz)

Lekérdezés végrehajtása

Lekérdezési eredmények

Standard lekérdezési operátorok a LINQ-ban entitások lekérdezéseihez

CLR metódus a canonical function mappinghez

Támogatott és nem támogatott LINQ-metódusok (LINQ az entitásokhoz)

Ismert problémák és szempontok a LINQ-ban az entitások között

Lásd még