Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 20728|Válasz: 0

[Forrás] Mint például fuzzy query a Linq-ben a SQL-be

[Linket másol]
Közzétéve 2015. 09. 07. 23:16:28 | | |
A Like működése kicsit olyan, mint az in, de az irány megváltozott. Mit jelent ez? Adsz egy stringet, és keresel egy mezőt az adatban, amely tartalmazza ezt a stringet. Vagyis egy adott string egy mező részhalmaza. A sql scrip{filter}t így van írva.


Selec * a táblázatból, ahol id '%AD%'
Selec * a táblázatból, ahol id '%AD' tetszik
Selec * a táblából, ahol az id 'AD%' tetszik
A fenti % egy vadkártya, ami azt jelzi, hogy a mező tartalmaz egy értéket, és az ismeretlen pozíciót helyettesítik %. Az első, hogy jelezzük, hogy a középső szakasz AD, és a két vége nem egyértelmű. A második a végén AD, az előző pedig nem egyértelmű. A harmadik viszont ezzel szemben AD-vel kezdődik és nem érthetően ér véget. A megfelelő Linq állítás a következő:


Var q = (a c-től a db-ben. Ügyfelek
ahol c.CustomerID.Contains("ROUT")
válassz c-t). ToList();
Az általa generált SQL a következőképpen


VÁLASZD [t0]-ot. [CustomerID], [t0]. [Cégnév], [t0]. [ContactName], [t0]. [KontaktT
itle], [t0]. [Cím], [t0]. [City], [t0]. [Régió], [t0]. [Irányítószám], [t0]. [Tanácsos
try], [t0]. [Telefon], [t0]. [Fax]
FROM [dbo]. [Ügyfelek] AS [t0]
AHOL [t0]. [CustomerID] MINT @p0
-- @p0: bemeneti lánc (méret = 6; Prec = 0; Skála = 0) [%ROUT%]
Befejezés ISSA-val, vezető wildcard:


Var q = (a c-től a db-ben. Ügyfelek
ahol c.CustomerID.EndsWith("ISSA")
válassz c-t). ToList();
Az általa generált SQL a következőképpen


VÁLASZD [t0]-ot. [CustomerID], [t0]. [Cégnév], [t0]. [ContactName], [t0]. [KontaktT
itle], [t0]. [Cím], [t0]. [City], [t0]. [Régió], [t0]. [Irányítószám], [t0]. [Tanácsos
try], [t0]. [Telefon], [t0]. [Fax]
FROM [dbo]. [Ügyfelek] AS [t0]
AHOL [t0]. [CustomerID] MINT @p0
-- @p0: bemeneti lánc (méret = 5; Prec = 0; Skála = 0) [%ISSA]
Kezdve az ARO-val, a tail wildcard:


Var q = (a c-től a db-ben. Ügyfelek
ahol c.CustomerID.BeginsWith("ARO")
válassz c-t). ToList();
Az általa generált SQL a következőképpen


VÁLASZD [t0]-ot. [CustomerID], [t0]. [Cégnév], [t0]. [ContactName], [t0]. [KontaktT
itle], [t0]. [Cím], [t0]. [City], [t0]. [Régió], [t0]. [Irányítószám], [t0]. [Tanácsos
try], [t0]. [Telefon], [t0]. [Fax]
FROM [dbo]. [Ügyfelek] AS [t0]
AHOL [t0]. [CustomerID] MINT @p0
-- @p0: bemeneti lánc (méret = 4; Prec = 0; Méretarány = 0) [ARO%]

A Linq egy SqlMethods.Like nevű metódust is biztosít, amelyhez először a System.Data.Linq.SqlClient névteret kell hozzáadni. A fenti három leírható


Var q = (a c-től a db-ben. Ügyfelek
ahol SqlMethods.Like(c.CustomerID, "%ROUT%")
válassz c-t). ToList();
Itt magadnak kell kitöltened a vakerot, hogy elmondd Linqnak, hogyan illeszkedtél hozzá. Mint mit


Var q = (a c-től a db-ben. Ügyfelek
ahol SqlMethods.Like(c.CustomerID, "%ISSA")
válassz c-t). ToList();
Egy másik példa:


Var q = (a c-től a db-ben. Ügyfelek
ahol SqlMethods.Like(c.CustomerID, "ARO%")
válassz c-t). ToList();
A legcsodálatosabb a SqlMethods.Like-ban, hogy bárhol megvalósíthatod a wildcard-okat, saját meghatározott wildcard kifejezéseiddel. Mint mit


Var q = (a c-től a db-ben. Ügyfelek
ahol SqlMethods.Like(c.CustomerID, "A%O%T")
válassz c-t). ToList();
Az általa generált SQL a következőképpen


VÁLASZD [t0]-ot. [CustomerID], [t0]. [Cégnév], [t0]. [ContactName], [t0]. [KontaktT
itle], [t0]. [Cím], [t0]. [City], [t0]. [Régió], [t0]. [Irányítószám], [t0]. [Tanácsos
try], [t0]. [Telefon], [t0]. [Fax]
FROM [dbo]. [Ügyfelek] AS [t0]
AHOL [t0]. [CustomerID] MINT @p0
-- @p0: bemeneti lánc (méret = 5; Prec = 0; Skála = 0) [A%O%T]

A legszokványosabb dolog, hogy tudjuk, hogy A-val kezdődik és T-vel végződik, a középen van egy O érték, és semmi mást nem tud. Csak használd ezt.
Az SQL Server négy vadkártyát határoz meg, amelyek mind elérhetők itt. Ezek a következők:
Wildcard character Descrip{filter}tion Example
% Bármilyen nulla vagy több karakterből álló sorozat. WHERE a cím, MINT a '%computer%', minden olyan könyvcímet talál, ahol a 'computer' szó bárhol a könyv címében található.
_ (aláhúzás) Bármelyik karakter. WHERE au_fname LIKE a '_ean' tartalmazza az összes négybetűs keresztnevet, amelyek ean-nal végződnek (Dean, Sean és így tovább).
[ ] Bármely egyedi karakter a megadott tartományban ([a-f]) vagy halmazban ([abcdef]). AHOL au_lname LIKE a '[C-P]arsen' szerző vezetéknevei arsennel végződnek, és bármely egyes karakterrel kezdődnek C és P között, például Carsen, Larsen, Karsen és így tovább.
[^] Bármely egyedi karakter, amely nem a megadott tartományban ([^a-f]) vagy halmazban ([^abcdef]). AHOL au_lname MINT 'de[^l]%', minden szerző vezetéknev de betűvel kezdődik, és ahol a következő betű nem l.

% egy nulla hosszúságú vagy bármilyen hosszúságú húrt jelöl. _ egy karaktert jelöl. [] egy karaktert jelöl egy tartományban. [^] olyan karaktert jelöl, amely nem egy bizonyos tartományban van
Például:


Var q = (a c-től a db-ben. Ügyfelek
ahol SqlMethods.Like(c.CustomerID, "A_O_T")
válassz c-t). ToList();
Csak használd _ betűt egy karakter ábrázolására. A generált SQL a következő:


VÁLASZD [t0]-ot. [CustomerID], [t0]. [Cégnév], [t0]. [ContactName], [t0]. [KontaktT
itle], [t0]. [Cím], [t0]. [City], [t0]. [Régió], [t0]. [Irányítószám], [t0]. [Tanácsos
try], [t0]. [Telefon], [t0]. [Fax]
FROM [dbo]. [Ügyfelek] AS [t0]
AHOL [t0]. [CustomerID] MINT @p0
-- @p0: bemeneti lánc (méret = 5; Prec = 0; Skála = 0) [A_O_T]

A Not Like esetében is nagyon egyszerű, csak tegyél hozzá valami hülyeséget.


Var q = (a c-től a db-ben. Ügyfelek
hol! SqlMethods.Like(c.CustomerID, "A_O_T")
válassz c-t). ToList();

A SqlMethods.Like tartalmaz egy escape karakter nevű paramétert is, amelyet az alábbihoz hasonlóan lefordítanak kijelentésre.


VÁLASSZ oszlopokat a táblázatból AHOL
oszlop LIKE '%\%%' ESCAPE '\'
Az escape azért van, mert egy mező speciális karaktereket tartalmaz, például %,_ [ ], amelyeket vadkártyáként használnak. Itt jön képbe az Escape. Ez egy SQL Server dolog.





Előző:Weboldal teljesítményoptimalizálása: Részletes magyarázat a cache-vezérlő beállításokról
Következő:Ruijie mindig is eltökélt volt, mi történik
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com