Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 20728|Răspunde: 0

[Sursă] De exemplu, o interogare fuzzy în Linq către SQL

[Copiază linkul]
Postat pe 07.09.2015 23:16:28 | | |
Funcționarea lui Like este puțin asemănătoare în, dar direcția s-a schimbat. Ce înseamnă asta? Dai un șir și cauți un câmp în date care conține acest șir. Adică, un șir dat este un subset al unui corp. SQL scrip{filter}t este scris astfel.


Selectează * din tabelul unde aș vrea '%AD%'
Selectează * din tabelul unde aș vrea '%AD'
Selectează * din tabel unde aș vrea 'AD%'
Procentul de mai sus este un wildcard, indicând că câmpul conține o valoare, iar poziția necunoscută este înlocuită cu %. Prima este pentru a indica faptul că secțiunea din mijloc este d.Hr., iar cele două capete nu sunt clare. Al doilea este AD la final, iar cel anterior nu este clar. Al treilea, dimpotrivă, începe cu AD și se termină neclar. Afirmația Linq corespunzătoare este:


var q = (de la c în db. Clienți
unde c.CustomerID.Contains("ROUT")
selectează c). ToList();
SQL-ul pe care îl generează este


SELECT [t0]. [CustomerID], [t0]. [NumeCompanie], [t0]. [NumeContact], [t0]. [ContactT
itle], [t0]. [Adresă], [t0]. [Oraș], [t0]. [Regiune], [t0]. [Cod poștal], [t0]. [Consilier
încearcă], [t0]. [Telefon], [t0]. [Fax]
DE la [dbo]. [Clienți] AS [t0]
UNDE [t0]. [ID-Client] CA @p0
-- @p0: String de intrare (Dimensiune = 6; Prec = 0; Scară = 0) [%ROUT%]
Încheind cu ISSA, principalul wildcard:


var q = (de la c în db. Clienți
unde c.CustomerID.EndsWith("ISSA")
selectează c). ToList();
SQL-ul pe care îl generează este


SELECT [t0]. [CustomerID], [t0]. [NumeCompanie], [t0]. [NumeContact], [t0]. [ContactT
itle], [t0]. [Adresă], [t0]. [Oraș], [t0]. [Regiune], [t0]. [Cod poștal], [t0]. [Consilier
încearcă], [t0]. [Telefon], [t0]. [Fax]
DE la [dbo]. [Clienți] AS [t0]
UNDE [t0]. [ID-Client] CA @p0
-- @p0: String de intrare (Dimensiune = 5; Prec = 0; Scară = 0) [%ISSA]
Începând cu ARO, coada wildcard:


var q = (de la c în db. Clienți
unde c.CustomerID.StartsWith("ARO")
selectează c). ToList();
SQL-ul pe care îl generează este


SELECT [t0]. [CustomerID], [t0]. [NumeCompanie], [t0]. [NumeContact], [t0]. [ContactT
itle], [t0]. [Adresă], [t0]. [Oraș], [t0]. [Regiune], [t0]. [Cod poștal], [t0]. [Consilier
încearcă], [t0]. [Telefon], [t0]. [Fax]
DE la [dbo]. [Clienți] AS [t0]
UNDE [t0]. [ID-Client] CA @p0
-- @p0: String de intrare (Dimensiune = 4; Prec = 0; Scară = 0) [ARO%]

Linq oferă și o metodă numită SqlMethods.Like, care necesită adăugarea mai întâi a spațiului de nume System.Data.Linq.SqlClient. Cele trei de mai sus pot fi scrise


var q = (de la c în db. Clienți
unde SqlMethods.Like(c.CustomerID, "%ROUT%")
selectează c). ToList();
Aici, trebuie să completezi tu însuți wildcard-ul ca să-i spui lui Linq cum ai făcut matching. Cum ar fi


var q = (de la c în db. Clienți
unde SqlMethods.Like(c.CustomerID, "%ISSA")
selectează c). ToList();
Un alt exemplu:


var q = (de la c în db. Clienți
unde SqlMethods.Like (c.CustomerID, "ARO%")
selectează c). ToList();
Cel mai uimitor lucru la SqlMethods.Like este că poți implementa wildcard-uri oriunde cu propriile tale expresii wildcard definite. Cum ar fi


var q = (de la c în db. Clienți
unde SqlMethods.Like(c.CustomerID, "A%O%T")
selectează c). ToList();
SQL-ul pe care îl generează este


SELECT [t0]. [CustomerID], [t0]. [NumeCompanie], [t0]. [NumeContact], [t0]. [ContactT
itle], [t0]. [Adresă], [t0]. [Oraș], [t0]. [Regiune], [t0]. [Cod poștal], [t0]. [Consilier
încearcă], [t0]. [Telefon], [t0]. [Fax]
DE la [dbo]. [Clienți] AS [t0]
UNDE [t0]. [ID-Client] CA @p0
-- @p0: String de intrare (Dimensiune = 5; Prec = 0; Scară = 0) [A%O%T]

Cel mai standard lucru este să știi că începe cu A și se termină cu T, cunoaște o valoare O la mijloc și nu știe altceva. Folosește asta.
SQL Server definește patru wildcard-uri, toate disponibile aici. Acestea sunt:
Exemplu de caracter wildcard Descrip{filter}tion
% Orice șir de zero sau mai multe caractere. UNDE titlul PRECUM '%computer%' găsește toate titlurile cărților cu cuvântul 'computer' oriunde în titlul cărții.
_ (subliniere) Orice caracter. UNDE au_fname CA "_ean" găsește toate prenumele de patru litere care se termină cu ean (Dean, Sean și așa mai departe).
[ ] Orice caracter individual din intervalul specificat ([a-f]) sau set ([abcdef]). UNDE au_lname PRECUM '[C-P]arsen' găsește numele de familie ale autorului care se termină cu arsen și începe cu orice caracter între C și P, de exemplu Carsen, Larsen, Karsen și așa mai departe.
[^] Orice caracter individual care nu se află în intervalul specificat ([^a-f]) sau setul ([^abcdef]). UNDE au_lname CA 'de[^l]%' toate numele de familie ale autorilor care încep cu de și unde următoarea literă nu este l.

% reprezintă un șir de lungime zero sau orice lungime. _ indică un caracter. [] indică un caracter într-un interval de interval. [^] indică un caracter care nu se află într-un anumit interval
De exemplu:


var q = (de la c în db. Clienți
unde SqlMethods.Like(c.CustomerID, "A_O_T")
selectează c). ToList();
Folosește doar _ pentru a reprezenta un personaj. SQL-ul generat este:


SELECT [t0]. [CustomerID], [t0]. [NumeCompanie], [t0]. [NumeContact], [t0]. [ContactT
itle], [t0]. [Adresă], [t0]. [Oraș], [t0]. [Regiune], [t0]. [Cod poștal], [t0]. [Consilier
încearcă], [t0]. [Telefon], [t0]. [Fax]
DE la [dbo]. [Clienți] AS [t0]
UNDE [t0]. [ID-Client] CA @p0
-- @p0: String de intrare (Dimensiune = 5; Prec = 0; Scară = 0) [A_O_T]

Pentru Not Like, este și foarte simplu, adaugă doar o prostie.


var q = (de la c în db. Clienți
unde! SqlMethods.Like(c.CustomerID, "A_O_T")
selectează c). ToList();

SqlMethods.Like are, de asemenea, un parametru numit caracter de evadare, care va fi tradus într-o afirmație ca următoarea.


SELECT coloane DIN tabelul UNDE
coloană PRECUM '%\%%' ESCAPE '\'
Escape este cauzat de faptul că un câmp conține caractere speciale, precum %,_ [ ], care sunt folosite ca wildcard-uri. Aici intervine Escape. Asta ține de SQL Server.





Precedent:Optimizarea performanței site-ului: Explicație detaliată a setărilor de control al cache-ului
Următor:Ruijie a fost mereu hotărâtă ce se întâmplă
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com