Megosztás a következőn keresztül:


Adatforrás engedélyezése LINQ-lekérdezéshez (Visual Basic)

A LINQ többféleképpen is bővíthető, így bármely adatforrás lekérdezhető a LINQ-mintában. Az adatforrás lehet egy adatstruktúra, egy webszolgáltatás, egy fájlrendszer vagy egy adatbázis, amely néhányat elnevez. A LINQ-minta megkönnyíti az ügyfelek számára, hogy olyan adatforrást kérdezhessenek le, amelyhez engedélyezve van a LINQ-lekérdezés, mivel a lekérdezés szintaxisa és mintázata nem változik. A LINQ ezen adatforrásokra való kiterjesztésének módjai a következők:

  • A IEnumerable<T> interfész megvalósítása egy olyan típusban, hogy lehetővé tegye a LINQ lekérdezést annak objektumaira.

  • Hozzon létre olyan szabványos lekérdezési operátori metódusokat, mint például Where és Select, amelyek egy típus kiterjesztésére szolgálnak, ezáltal lehetővé téve az adott típus egyéni LINQ-lekérdezését.

  • Hozzon létre egy adatszolgáltatót az adatforrásához, amely megvalósítja a IQueryable<T> interfészt. Az interfészt megvalósító szolgáltató kifejezésfák formájában fogadja a LINQ-lekérdezéseket, amelyeket egyéni módon, például távolról is végrehajthat.

  • Hozzon létre egy olyan szolgáltatót az adatforráshoz, amely kihasználja a meglévő LINQ-technológiát. Egy ilyen szolgáltató nem csak lekérdezéseket, hanem beszúrási, frissítési és törlési műveleteket, valamint a felhasználó által definiált típusok leképezését is lehetővé tenné.

Ez a témakör ezeket a lehetőségeket ismerteti.

Az adatforrás LINQ-lekérdezésének engedélyezése

In-Memory adatok

A memóriabeli adatok LINQ-lekérdezésének kétféleképpen engedélyezhető. Ha az adatok olyan típusúak, amely implementálja a IEnumerable<T>-t, akkor LINQ to Objects segítségével lekérdezheti az adatokat. Ha nincs értelme, hogy a típus számbavétele lehetséges legyen a IEnumerable<T> felület implementálásával, akkor a típusban definiálhat LINQ standard lekérdezési operátor metódusokat, vagy létrehozhat olyan LINQ standard lekérdezési operátor metódusokat, amelyek kiterjesztik a típust. A standard lekérdezési operátorok egyéni implementációinak halasztott végrehajtást kell használniuk az eredmények visszaadásához.

Távoli adatok

A távoli adatforrás LINQ-lekérdezésének engedélyezéséhez a legjobb megoldás az IQueryable<T> interfész implementálása. Ez azonban eltér attól, hogy egy olyan szolgáltatót, mint például a LINQ az SQL-t kiterjeszti egy adatforrásra. A Visual Studio 2008-ban nem érhetők el a meglévő LINQ-technológiák, például a LINQ SQL-hez való kiterjesztésére szolgáló modellek más típusú adatforrásokhoz.

IQueryable LINQ-szolgáltatók

A implementálható IQueryable<T> LINQ-szolgáltatók összetettségükben nagy mértékben eltérhetnek. Ez a szakasz az összetettség különböző szintjeit ismerteti.

Egy kevésbé összetett IQueryable szolgáltató egy webszolgáltatás egyetlen metódusával is kommunikálhat. Ez a szolgáltatótípus nagyon specifikus, mert az általa kezelt lekérdezésekben konkrét információkat vár el. Zárt típusú rendszerrel rendelkezik, amely talán egyetlen eredménytípust is felfed. A lekérdezés végrehajtásának nagy része helyileg történik, például a Enumerable szabványos lekérdezési operátorok implementációinak használatával. Egy kevésbé összetett szolgáltató csak egy metódushívási kifejezést vizsgálhat meg a lekérdezést jelképező kifejezésfában, és a lekérdezés fennmaradó logikáját máshol is kezelheti.

Egy IQueryable közepes összetettségű szolgáltató olyan adatforrást célozhat meg, amely részben kifejező lekérdezési nyelvvel rendelkezik. Ha egy webszolgáltatást céloz meg, akkor a webszolgáltatás több metódusával is kommunikálhat, és a lekérdezés által feltett kérdés alapján kiválaszthatja a meghívni kívánt metódust. A közepes összetettségű szolgáltató gazdagabb típusú rendszerrel rendelkezik, mint egy egyszerű szolgáltató, de továbbra is rögzített típusú rendszer lenne. Előfordulhat például, hogy a szolgáltató olyan típusokat tesz hozzáférhetővé, amelyek rendelkeznek bejárható egy-a-többhöz kapcsolatokkal, de nem biztosít leképezési technológiát a felhasználó által definiált típusokhoz.

Egy összetett IQueryable szolgáltató, például a LINQ és az SQL-szolgáltató teljes LINQ-lekérdezéseket fordíthat le egy kifejező lekérdezési nyelvre, például az SQL-re. Az összetett szolgáltató általánosabb, mint egy kevésbé összetett szolgáltató, mivel a lekérdezésben szereplő kérdések szélesebb körét képes kezelni. Nyílt típusú rendszerrel is rendelkezik, ezért széles körű infrastruktúrát kell tartalmaznia a felhasználó által definiált típusok leképezéséhez. Egy összetett szolgáltató fejlesztése jelentős erőfeszítést igényel.

Lásd még