LINQ to SQL, adatbázis-lekérdezések

„” Ebben a cikkben használja a forráskód példát

Teljesítménye LINQ SQL lekérdezés végezzük, hasonló bármely más LINQ lekérdezés, de néhány kivételtől eltekintve. Úgy véljük őket nagyon röviden.

Elvégzésére LINQ to SQL lekérdezést, akkor először létre kell hoznia egy DataContext. Akkor majd, hogy a kérelmet az asztalra ezen belül DataContext:

Ha ezt a kódot, az ügyfél, a CustomerID egyenlő „EASTC”, kivonjuk a változó Cust. Ugyanakkor nem szabad elfelejteni, hogy a szabvány egységes lekérdezési művelet fog dobni egy kivételt, ha a sorrend, amelyben ő vyzvana tartalmaz nem találtunk megfelelő terméket. Ezért ebben az esetben van szükség, hogy pontosan tudja, mi az ügyfél „EASTC” létezik. Tény, hogy a szabványos SingleOrDefault lekérdezési művelet nagyobb védelmet biztosít abban az esetben, hogy nincs bejegyzés megfelel annak, ahol a szerkezet.

Ebben a példában azt kell megjegyezni, egy pár dolgot. Először is, vegye figyelembe, hogy a kérelemben képest CustomerID „EASTC” C # szintaxis. Ezt bizonyítja a kettős idézőjelbe helyett egyetlen, amint azt a SQL szintaxis.

Emellett ellenőrzési művelet segítségével C # == helyett egyenértékűség művelet egyenértékűség ellenőrzése SQL =. Ez azt mutatja, hogy a kérelem valójában integrálva a nyelvet: a végén következik a neve a LINQ - Language Integrated Query.

Másodszor, vegye figyelembe, hogy ebben a query kifejezésszintaktikai összekeverjük a standard dot jelölési szintaxis. Rész biztosított a lekérdezés szintaxisát expresszió, szögletes zárójelek, és az egységes működés hivatkoznak a szabványos dot jelöléssel.

És most a kérdés. Mert ha a dob a fenti kódot azonnali lekérdezés végrehajtása? Töprengett a választ, ne feledkezzünk meg a folyamatban lévő végrehajtási lekérdezések. A válasz igen, a szokásos működés Egykéréses azonnal végrehajtja a lekérdezést. Ha kivonjuk a könyörgése a műveletet, és azonnal vissza az eredményt a lekérdezés, a lekérdezés nem hajtható végre azonnal.

A fenti kód nem termel semmit a képernyőn, így csak hogy megbizonyosodjon arról, hogy a kód valóban kivonat az érintett ügyfél, a következő példa azt mutatja ugyanazt a kódot, de azzal a kiegészítéssel, a kimenet a képernyőn, amely megjeleníti a kivont rekord az ügyfél:

Itt látható a kimenet:

LINQ to SQL, adatbázis-lekérdezések

Említettük korábban, hogy a LINQ to SQL lekérdezések hasonlóak a szokásos LINQ lekérdezés, de néhány kivételtől eltekintve. Vegyük sorra ezeket kivételekkel:

LINQ to SQL lekérdezések érik IQueryable

Míg LINQ lekérdezések végre tömbök és a gyűjtemények ad vissza IEnumerable szekvencia, LINQ SQL lekérdezések, kérve egy sorozat, vissza szekvenciája típusú IQueryable. Az alábbiakban egy példa a lekérdezésre, ami visszaadja a szekvencia típus IQueryable:

Mint látható, ez a fajta visszatérítés kérés IQueryable. Itt az eredménye a kód:

LINQ to SQL, adatbázis-lekérdezések
„/>

Mint korábban említettük, mivel IQueryable végrehajtja IEnumerable, általában kezelni típusú szekvencia IQueryable, mintha sorozata IEnumerable. Ha a problémák merülnek fel - ne feledkezzünk meg AsEnumerable működését.

LINQ to SQL lekérdezések végre a táblázat tárgyak<Т>

Míg a hagyományos LINQ lekérdezések végre tömbök és a gyűjtemények, amelyek megvalósítják IEnumerable interfészek vagy IEnumerable, LINQ to SQL lekérdezés lefut az osztályokat, hogy hajtsák végre a IQueryable interfész, mint például a táblázat<Т>.

Ez azt jelenti, hogy a LINQ to SQL lekérdezések további lekérdezési műveleteket, valamint a standard lekérdezési műveletek miatt IQueryable végrehajtja IEnumerable.

LINQ to SQL lekérdezések lefordított SQL

Mivel LINQ to SQL lekérdezések érik sorozata típusú IQueryable, ezek nem lefordított köztes kódot .NET nyelv, akárcsak a hétköznapi LINQ lekérdezések. Ehelyett alakítjuk expressziós fák, amely lehetővé teszi számukra, hogy kell értékelni, mint egy egység, és fordítva megfelelő és optimális tervezése SQL. Olvassa el a cikket SQL Broadcast. többet megtudni az SQL fordítást, ami zajlik LINQ to SQL lekérdezések.

LINQ to SQL lekérdezések végrehajtása az adatbázisban

Ellentétben LINQ lekérdezések futnak a helyi gép memóriájában, LINQ to SQL lekérdezések lefordított SQL-hívásokat, amelyek ténylegesen végrehajtott szerepelnek az adatbázisban. Emiatt van némi eltérés, például a módon kezeli a vetítés, ami nem igazán történik az adatbázisban, mert nem tud semmit a belső bázis osztályok, valamint bármely más osztályokba.

Ezen kívül, mivel a lekérdezés ténylegesen végrehajtott az adatbázisban, és az adatbázis nem férnek hozzá a kódot a kérelmet, hogy lehet-e a kérelemben meg kell sugározni, ami korlátozza bizonyos mértékben függ a fordítási beállításokat. Nem lehet csak építeni egy kihívás, hogy írjon egy eljárást lambda kifejezés, és várják az SQL Server kitalálni, hogy mi köze a hívást. Emiatt jó lenne tudni, hogy mit lehet közvetíteni, hogy meg lehet fordítani, és mi történik, ha a fordítás nem lehetséges.

Kapcsolódó cikkek