See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 20728|Vastuse: 0

[Allikas] Nagu hägune päring Linq-s SQL-ile

[Kopeeri link]
Postitatud 07.09.2015 23:16:28 | | |
Like'i toimimine on natuke sarnane, aga suund on muutunud. Mida see tähendab? Sa annad stringi ja otsid andmetest välja, mis seda stringi sisaldab. See tähendab, et antud string on välja alamhulk. SQL scrip{filter}t on kirjutatud nii.


Selec * tabelist, kus id meeldib '%AD%'
Selec * tabelist, kus id meeldib '%AD'
Selec * tabelist, kus id meeldib 'AD%'
Ülalolev protsent on jokker, mis näitab, et väljal on väärtus ning tundmatu positsioon on asendatud protsendiga. Esiteks näitab, et keskmine osa on AD ja kaks otsa on ebaselged. Teine on AD lõpus ja eelmine on ebaselge. Kolmas seevastu algab AD-ga ja lõpeb ebaselgelt. Vastav Linqi väide on:


VAR q = (alates C-st db-s. Kliendid
kus c.CustomerID.Contains("ROUT")
vali c). ToList();
SQL, mida see genereerib, on


VALI [t0]. [CustomerID], [t0]. [CompanyName], [t0]. [KontaktNimi], [t0]. [KontaktT
itle], [t0]. [Aadress], [t0]. [Linn], [t0]. [Piirkond], [t0]. [Postiindeks], [t0]. [Nõunik
try], [t0]. [Telefon], [t0]. [Faks]
FROM [dbo]. [Kliendid] AS [t0]
KUS [t0]. [CustomerID] NAGU @p0
-- @p0: sisendstring (suurus = 6; Prec = 0; Skaala = 0) [%ROUT%]
Lõpp ISSA-ga, pea wild card:


VAR q = (alates C-st db-s. Kliendid
kus c.CustomerID.EndsWith("ISSA")
vali c). ToList();
SQL, mida see genereerib, on


VALI [t0]. [CustomerID], [t0]. [CompanyName], [t0]. [KontaktNimi], [t0]. [KontaktT
itle], [t0]. [Aadress], [t0]. [Linn], [t0]. [Piirkond], [t0]. [Postiindeks], [t0]. [Nõunik
try], [t0]. [Telefon], [t0]. [Faks]
FROM [dbo]. [Kliendid] AS [t0]
KUS [t0]. [CustomerID] NAGU @p0
-- @p0: sisendstring (suurus = 5; Prec = 0; Skaala = 0) [%ISSA]
Alustades ARO-st, saba wild card:


VAR q = (alates C-st db-s. Kliendid
kus c.CustomerID.StartsWith("ARO")
vali c). ToList();
SQL, mida see genereerib, on


VALI [t0]. [CustomerID], [t0]. [CompanyName], [t0]. [KontaktNimi], [t0]. [KontaktT
itle], [t0]. [Aadress], [t0]. [Linn], [t0]. [Piirkond], [t0]. [Postiindeks], [t0]. [Nõunik
try], [t0]. [Telefon], [t0]. [Faks]
FROM [dbo]. [Kliendid] AS [t0]
KUS [t0]. [CustomerID] NAGU @p0
-- @p0: sisendstring (suurus = 4; Prec = 0; Skaala = 0) [ARO%]

Linq pakub ka meetodit nimega SqlMethods.Like, mis nõuab esmalt System.Data.Linq.SqlClient nimeruumi lisamist. Ülaltoodud kolm saab kirjutada


VAR q = (alates C-st db-s. Kliendid
kus SqlMethods.Like(c.CustomerID, "%ROUT%")
vali c). ToList();
Siin pead ise jokkeri täitma, et Linq'le öelda, kuidas sobitasid. Nagu mis


VAR q = (alates C-st db-s. Kliendid
kus SqlMethods.Like(c.CustomerID, "%ISSA")
vali c). ToList();
Teine näide:


VAR q = (alates C-st db-s. Kliendid
kus SqlMethods.Like(c.CustomerID, "ARO%")
vali c). ToList();
Kõige hämmastavam asi SqlMethods.Like'i juures on see, et saad teha wildcard'e ükskõik kus oma määratletud wildcard'i avaldistega. Nagu mis


VAR q = (alates C-st db-s. Kliendid
kus SqlMethods.Like(c.CustomerID, "A%O%T")
vali c). ToList();
SQL, mida see genereerib, on


VALI [t0]. [CustomerID], [t0]. [CompanyName], [t0]. [KontaktNimi], [t0]. [KontaktT
itle], [t0]. [Aadress], [t0]. [Linn], [t0]. [Piirkond], [t0]. [Postiindeks], [t0]. [Nõunik
try], [t0]. [Telefon], [t0]. [Faks]
FROM [dbo]. [Kliendid] AS [t0]
KUS [t0]. [CustomerID] NAGU @p0
-- @p0: sisendstring (suurus = 5; Prec = 0; Skaala = 0) [A%O%T]

Kõige tavalisem on teada, et see algab A-ga ja lõpeb T-ga, teab väärtust O keskel ja ei tea midagi muud. Kasuta lihtsalt seda.
SQL Server määratleb neli jokkerit, mis kõik on siin saadaval. Need on:
Wildcard märk Descrip{filter}tion Näide
% Mis tahes nullist või enamast tähemärgist koosnev jada. KUS pealkiri NAGU '%computer%' leiab kõik raamatute pealkirjad, kus raamatu pealkirjas on sõna 'computer'.
_ (alajoon) Ükskõik milline üksainus tähemärk. KUS au_fname NAGU '_ean' leiab kõik neljatähelised eesnimed, mis lõpevad eaniga (Dean, Sean jne).
[ ] Üksainus märk määratud vahemikus ([a-f]) või hulgas ([abcdef]). KUS au_lname NAGU '[C-P]arsen' leiab autori perekonnanimed, mis lõpevad arseniga ja algavad ükskõik millise tähemärgiga C ja P vahel, näiteks Carsen, Larsen, Karsen jne.
[^] Iga üksik märk, mis ei kuulu määratud vahemikku ([^a-f]) või hulgasse ([^abcdef]). KUS au_lname NAGU 'de[^l]%' kõik autorite perekonnanimed, mis algavad de-ga ja kus järgmine täht ei ole l.

% tähistab nullpikkusega või suvalise pikkusega stringi. _ tähistab märki. [] tähistab märki vahemikus. [^] tähistab märki, mis ei kuulu teatud vahemikku
Nagu mida:


VAR q = (alates C-st db-s. Kliendid
kus SqlMethods.Like(c.CustomerID, "A_O_T")
vali c). ToList();
Kasuta lihtsalt _ tegelase esindamiseks. Genereeritud SQL on:


VALI [t0]. [CustomerID], [t0]. [CompanyName], [t0]. [KontaktNimi], [t0]. [KontaktT
itle], [t0]. [Aadress], [t0]. [Linn], [t0]. [Piirkond], [t0]. [Postiindeks], [t0]. [Nõunik
try], [t0]. [Telefon], [t0]. [Faks]
FROM [dbo]. [Kliendid] AS [t0]
KUS [t0]. [CustomerID] NAGU @p0
-- @p0: sisendstring (suurus = 5; Prec = 0; Skaala = 0) [A_O_T]

Not Like puhul on see samuti väga lihtne, lihtsalt lisa mingi mõttetus.


VAR q = (alates C-st db-s. Kliendid
kus! SqlMethods.Like(c.CustomerID, "A_O_T")
vali c). ToList();

SqlMethods.Like'il on ka parameeter nimega escape character, mis tõlgitakse järgmiseks avalduseks.


VALI veerud tabelist KUS
veerg LIKE '%\%%' ESCAPE '\'
Põgenemine tuleneb sellest, et väljas on erimärke, nagu %,_ [ ], mida kasutatakse jokkeridena. Siin tulebki mängu Escape. See on SQL Serveri asi.





Eelmine:Veebisaidi jõudluse optimeerimine: Vahemälu juhtimise seadete üksikasjalik selgitus
Järgmine:Ruijie on alati olnud kindel, mis toimub
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com