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:
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
Mint látható, ez a fajta visszatérítés kérés IQueryable
Mint korábban említettük, mivel IQueryable
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
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
LINQ to SQL lekérdezések lefordított SQL
Mivel LINQ to SQL lekérdezések érik sorozata típusú IQueryable
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.