Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 20728|Risposta: 0

[Fonte] Come una query fuzzy in Linq su SQL

[Copiato link]
Pubblicato su 07/09/2015 23:16:28 | | |
Il funzionamento di Like è un po' simile a in, ma la direzione è cambiata. Che cosa significa? Dai una stringa e cerchi un campo nei dati che contiene questa stringa. Cioè, una data stringa è un sottoinsieme di un campo. SQL scrip{filter}t è scritto così.


Seleziona * dalla tabella dove vorrei '%AD%'
Seleziona * dalla tabella dove vorrei '%AD'
Seleziona * dalla tabella dove vorrei 'AD%'
La percentuale sopra è un jolly, indicando che il campo contiene un valore, e la posizione sconosciuta viene sostituita da %. La prima serve a indicare che la sezione centrale è d.C., e le due estremità non sono chiare. La seconda è AD alla fine, e la precedente non è chiara. Il terzo, al contrario, inizia con AD e termina in modo poco chiaro. La corrispondente affermazione Linq è:


var q = (da c in db. Clienti
dove c.CustomerID.Contiene ("ROUT")
seleziona c). ToList();
L'SQL che genera è


SELEZIONA [t0]. [CustomerID], [t0]. [NomeAzienda], [t0]. [NomeContatto], [t0]. [ContattT
itle], [t0]. [Indirizzo], [t0]. [Città], [t0]. [Regione], [t0]. [CAP], [t0]. [Consiglio
try], [t0]. [Telefono], [t0]. [Fax]
DA [dbo]. [Clienti] AS [t0]
DOVE [t0]. [CustomerID] COME @p0
-- @p0: stringa di input (dimensione = 6; Prec = 0; Scala = 0) [%ROUT%]
Concludendo con ISSA, la wild card principale:


var q = (da c in db. Clienti
dove c.CustomerID.EndsWith("ISSA")
seleziona c). ToList();
L'SQL che genera è


SELEZIONA [t0]. [CustomerID], [t0]. [NomeAzienda], [t0]. [NomeContatto], [t0]. [ContattT
itle], [t0]. [Indirizzo], [t0]. [Città], [t0]. [Regione], [t0]. [CAP], [t0]. [Consiglio
try], [t0]. [Telefono], [t0]. [Fax]
DA [dbo]. [Clienti] AS [t0]
DOVE [t0]. [CustomerID] COME @p0
-- @p0: stringa di input (dimensione = 5; Prec = 0; Scala = 0) [%ISSA]
A partire da ARO, coda wildcard:


var q = (da c in db. Clienti
dove c.CustomerID.StartsWith("ARO")
seleziona c). ToList();
L'SQL che genera è


SELEZIONA [t0]. [CustomerID], [t0]. [NomeAzienda], [t0]. [NomeContatto], [t0]. [ContattT
itle], [t0]. [Indirizzo], [t0]. [Città], [t0]. [Regione], [t0]. [CAP], [t0]. [Consiglio
try], [t0]. [Telefono], [t0]. [Fax]
DA [dbo]. [Clienti] AS [t0]
DOVE [t0]. [CustomerID] COME @p0
-- @p0: stringa di input (dimensione = 4; Prec = 0; Scala = 0) [ARO%]

Linq fornisce anche un metodo chiamato SqlMethods.Like, che richiede di aggiungere prima lo spazio di nomi System.Data.Linq.SqlClient. I tre precedenti possono essere scritti


var q = (da c in db. Clienti
dove SqlMethods.Like(c.CustomerID, "%ROUT%")
seleziona c). ToList();
Qui, devi compilare tu stesso il jolly per dire a Linq come sei stato abbinato. Come cosa


var q = (da c in db. Clienti
dove SqlMethods.Like(c.CustomerID, "%ISSA")
seleziona c). ToList();
Un altro esempio:


var q = (da c in db. Clienti
dove SqlMethods.Like(c.CustomerID, "ARO%")
seleziona c). ToList();
La cosa più sorprendente di SqlMethods. Ad esempio, è che puoi implementare le carte jolly ovunque con le tue espressioni jolly definite. Come cosa


var q = (da c in db. Clienti
dove SqlMethods.Like(c.CustomerID, "A%O%T")
seleziona c). ToList();
L'SQL che genera è


SELEZIONA [t0]. [CustomerID], [t0]. [NomeAzienda], [t0]. [NomeContatto], [t0]. [ContattT
itle], [t0]. [Indirizzo], [t0]. [Città], [t0]. [Regione], [t0]. [CAP], [t0]. [Consiglio
try], [t0]. [Telefono], [t0]. [Fax]
DA [dbo]. [Clienti] AS [t0]
DOVE [t0]. [CustomerID] COME @p0
-- @p0: stringa di input (dimensione = 5; Prec = 0; Scala = 0) [A%O%T]

La cosa più standard è sapere che inizia con A e termina con T, conosce un valore O al centro e non conosce altro. Usa semplicemente questo.
SQL Server definisce quattro jolly, tutti disponibili qui. Sono:
Esempio di personaggio jolly Descrip{filter}tion
% Qualsiasi stringa di zero o più caratteri. DOVE titoli come '%computer%' trovano tutti i titoli di libri con la parola 'computer' ovunque nel titolo.
_ (sottolinea) Qualsiasi singolo carattere. DOVE au_fname COME '_ean' trova tutti i nomi di battesimo di quattro lettere che terminano con ean (Dean, Sean, e così via).
[ ] Qualsiasi singolo carattere all'interno dell'intervallo specificato ([a-f]) o dell'insieme ([abcdef]). DOVE au_lname COME '[C-P]arsen' trovi cognomi autori che terminano con arsen e iniziano con un singolo carattere tra C e P, ad esempio Carsen, Larsen, Karsen, e così via.
[^] Qualsiasi singolo carattere non rientrato nell'intervallo specificato ([^a-f]) o nel set ([^abcdef]). DOVE au_lname COME 'de[^l]%' tutti i cognomi dell'autore che iniziano con de e dove la lettera seguente non è l.

% rappresenta una stringa di lunghezza zero o qualsiasi lunghezza. _ indica un carattere. [] indica un carattere in un intervallo. [^] indica un carattere che non è in un certo intervallo
Come cosa:


var q = (da c in db. Clienti
dove SqlMethods.Like(c.CustomerID, "A_O_T")
seleziona c). ToList();
Basta usare _ per rappresentare un personaggio. Il SQL generato è:


SELEZIONA [t0]. [CustomerID], [t0]. [NomeAzienda], [t0]. [NomeContatto], [t0]. [ContattT
itle], [t0]. [Indirizzo], [t0]. [Città], [t0]. [Regione], [t0]. [CAP], [t0]. [Consiglio
try], [t0]. [Telefono], [t0]. [Fax]
DA [dbo]. [Clienti] AS [t0]
DOVE [t0]. [CustomerID] COME @p0
-- @p0: stringa di input (dimensione = 5; Prec = 0; Scala = 0) [A_O_T]

Per il Non Piacere, è anche molto semplice, basta aggiungere un nonsense.


var q = (da c in db. Clienti
dove! SqlMethods.Like(c.CustomerID, "A_O_T")
seleziona c). ToList();

SqlMethods.Like ha anche un parametro chiamato carattere di fuga, che verrà tradotto in un'affermazione come la seguente.


SELECT colonne FROM table WHERE
colonna LIKE '%\%%' ESCAPE '\'
Escape è dovuto al fatto che un campo contiene caratteri speciali, come %,_ [ ], che vengono usati come jolly. Ed è qui che entra in gioco Escape. È una cosa di SQL Server.





Precedente:Ottimizzazione delle prestazioni del sito web: spiegazione dettagliata delle impostazioni di controllo della cache
Prossimo:Ruijie è sempre stata determinata su cosa stesse succedendo
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com