De werking van Like is een beetje zoals in, maar de richting is veranderd. Wat betekent het? Je geeft een string en zoekt naar een veld in de data dat deze string bevat. Dat wil zeggen, een gegeven string is een deelverzameling van een lichaam. SQL scrip{filter}t is zo geschreven.
Kies * uit de tabel waar ik '%AD%' zou willen Kies * uit de tabel waar ik graag '%AD' zou willen Kies * uit de tabel waar ik 'AD%' leuk vind. Het bovenstaande percentage is een joker, wat aangeeft dat het veld een waarde bevat, en de onbekende positie wordt vervangen door % De eerste is om aan te geven dat het middengedeelte AD is, en dat de twee uiteinden onduidelijk zijn. De tweede is AD aan het einde, en de vorige is onduidelijk. De derde begint daarentegen met AD en eindigt onduidelijk. De bijbehorende Linq-uitspraak is:
var q = (van c in db. Klanten waarbij c.CustomerID.Contains("ROUT") selecteer c). ToList(); De SQL die het genereert is
SELECTEER [t0]. [CustomerID], [t0]. [Bedrijfsnaam], [t0]. [ContactNaam], [t0]. [ContactT Itle], [t0]. [Adres], [t0]. [Stad], [t0]. [Regio], [t0]. [Postcode], [t0]. [Raadsman] probeer], [t0]. [Telefoon], [t0]. [Fax] VAN [dbo]. [Klanten] AS [t0] WAAR [t0]. [Klant-ID] ZOALS @p0 -- @p0: Invoerstring (grootte = 6; Prec = 0; Schaal = 0) [%ROUTE%] Eindigend met ISSA, hoofdjoker:
var q = (van c in db. Klanten waarbij c.CustomerID.EndsWith("ISSA") selecteer c). ToList(); De SQL die het genereert is
SELECTEER [t0]. [CustomerID], [t0]. [Bedrijfsnaam], [t0]. [ContactNaam], [t0]. [ContactT Itle], [t0]. [Adres], [t0]. [Stad], [t0]. [Regio], [t0]. [Postcode], [t0]. [Raadsman] probeer], [t0]. [Telefoon], [t0]. [Fax] VAN [dbo]. [Klanten] AS [t0] WAAR [t0]. [Klant-ID] ZOALS @p0 -- @p0: Invoerstring (grootte = 5; Prec = 0; Schaal = 0) [%ISSA] Te beginnen met ARO, staart wildcard:
var q = (van c in db. Klanten waarbij c.CustomerID.StartsWith("ARO") selecteer c). ToList(); De SQL die het genereert is
SELECTEER [t0]. [CustomerID], [t0]. [Bedrijfsnaam], [t0]. [ContactNaam], [t0]. [ContactT Itle], [t0]. [Adres], [t0]. [Stad], [t0]. [Regio], [t0]. [Postcode], [t0]. [Raadsman] probeer], [t0]. [Telefoon], [t0]. [Fax] VAN [dbo]. [Klanten] AS [t0] WAAR [t0]. [Klant-ID] ZOALS @p0 -- @p0: Invoerstring (grootte = 4; Prec = 0; Schaal = 0) [ARO%]
Linq biedt ook een methode genaamd SqlMethods.Like, waarvoor eerst de naamruimte System.Data.Linq.SqlClient wordt toegevoegd. De bovenstaande drie kunnen worden geschreven
var q = (van c in db. Klanten waar SqlMethods.Like(c.CustomerID, "%ROUT%") selecteer c). ToList(); Hier moet je zelf de joker invullen om Linq te vertellen hoe je bent gematcht. Wat dan?
var q = (van c in db. Klanten waar SqlMethods.Like(c.CustomerID, "%ISSA") selecteer c). ToList(); Nog een voorbeeld:
var q = (van c in db. Klanten waar SqlMethods.Like(c.CustomerID, "ARO%") selecteer c). ToList(); Het meest bijzondere aan SqlMethods.Like is dat je wildcards overal kunt implementeren met je eigen gedefinieerde wildcard-expressies. Wat dan?
var q = (van c in db. Klanten waar SqlMethods.Like(c.CustomerID, "A%O%T") selecteer c). ToList(); De SQL die het genereert is
SELECTEER [t0]. [CustomerID], [t0]. [Bedrijfsnaam], [t0]. [ContactNaam], [t0]. [ContactT Itle], [t0]. [Adres], [t0]. [Stad], [t0]. [Regio], [t0]. [Postcode], [t0]. [Raadsman] probeer], [t0]. [Telefoon], [t0]. [Fax] VAN [dbo]. [Klanten] AS [t0] WAAR [t0]. [Klant-ID] ZOALS @p0 -- @p0: Invoerstring (grootte = 5; Prec = 0; Schaal = 0) [A%O%T]
Het meest standaard is om te weten dat het begint met A en eindigt met T, een waarde O in het midden kent, en verder niets weet. Gebruik gewoon dit. SQL Server definieert vier wildcards, die allemaal hier beschikbaar zijn. Deze zijn: Voorbeeld van wildcard-karakter Descrip{filter}tion % Elke reeks van nul of meer tekens. WAAR een titel ZOALS '%computer%' alle boektitels met het woord 'computer' ergens in de boektitel vindt. _ (onderstreep) Elk enkel personage. WAAR au_fname LIKE '_ean' alle vierletterige voornamen vindt die eindigen op ean (Dean, Sean, enzovoort). [ ] Elk enkel teken binnen het opgegeven bereik ([a-f]) of verzameling ([abcdef]). WAAR au_lname ZOALS '[C-P]arsen' auteursachternamen vindt die eindigen op arsen en beginnen met elk enkel teken tussen C en P, bijvoorbeeld Carsen, Larsen, Karsen, enzovoort. [^] Elk enkel teken dat niet binnen het opgegeven bereik ([^a-f]) of de verzameling ([^abcdef]) ligt. WAARBIJ au_lname ZOALS 'de[^l]%' alle auteursachternamen beginnend met de en waarbij de volgende letter niet l is.
% staat voor een string van nul lengte of elke lengte. _ duidt op een karakter. [] duidt een karakter in een bereik aan. [^] duidt een teken aan dat niet in een bepaald bereik ligt Zoals wat:
var q = (van c in db. Klanten waar SqlMethods.Like(c.CustomerID, "A_O_T") selecteer c). ToList(); Gebruik gewoon _ om een personage te representeren. De gegenereerde SQL is:
SELECTEER [t0]. [CustomerID], [t0]. [Bedrijfsnaam], [t0]. [ContactNaam], [t0]. [ContactT Itle], [t0]. [Adres], [t0]. [Stad], [t0]. [Regio], [t0]. [Postcode], [t0]. [Raadsman] probeer], [t0]. [Telefoon], [t0]. [Fax] VAN [dbo]. [Klanten] AS [t0] WAAR [t0]. [Klant-ID] ZOALS @p0 -- @p0: Invoerstring (grootte = 5; Prec = 0; Schaal = 0) [A_O_T]
Voor Not Like is het ook heel simpel, voeg gewoon een onzin toe.
var q = (van c in db. Klanten waar ! SqlMethods.Like(c.CustomerID, "A_O_T") selecteer c). ToList();
SqlMethods.Like heeft ook een parameter genaamd escape character, die wordt vertaald naar een instructie zoals de volgende.
SELECTEER kolommen UIT tabel WAAR kolom ZOALS '%\%%' ESCAPE '\' Escape is omdat een veld speciale tekens bevat, zoals %,_ [ ], die als jokers worden gebruikt. Daar komt Escape om de hoek kijken. Dit is een SQL Server-ding.
|