Działanie Like jest trochę jak in, ale kierunek się zmienił. Co to znaczy? Podajesz ciąg znaków i szukasz pola w danych, które zawiera ten ciąg. To znaczy, że dany ciąg jest podzbiorem ciała. SQL scrip{filter}t jest napisany w ten sposób.
Selec * z tabeli, gdzie chciałbym '%AD%' Selec * ze stołu, gdzie chciałbym '%AD' Selec * z tabeli, gdzie chciałbym 'AD%' Powyższy % to dzika karta, oznaczająca, że pole zawiera wartość, a nieznana pozycja jest zastępowana przez % Pierwszy ma wskazać, że środkowa część jest AD, a oba końce są niejasne. Drugi to AD na końcu, a poprzedni jest niejasny. Trzecia, przeciwnie, zaczyna się od AD i kończy niewyraźnie. Odpowiadające stwierdzenie Linq to:
var q = (z c w db. Klienci gdzie c.CustomerID.Contains("ROUT") Wybierz c). ToList(); Generowany przez niego SQL to
WYBIERZ [t0]. [CustomerID], [t0]. [Nazwa Firmy], [t0]. [ContactName], [t0]. [KontaktT itle], [t0]. [Adres], [t0]. [City], [t0]. [Region], [t0]. [PostalCode], [t0]. [Radny try], [t0]. [Telefon], [t0]. [Faks] FROM [dbo]. [Klienci] AS [t0] GDZIE [t0]. [CustomerID] JAK @p0 -- @p0: Ciąg wejściowy (rozmiar = 6; Prec = 0; Skala = 0) [%ROUT%] Zakończenie na ISSA, główna karta dzika:
var q = (z c w db. Klienci gdzie c.CustomerID.EndsWith("ISSA") Wybierz c). ToList(); Generowany przez niego SQL to
WYBIERZ [t0]. [CustomerID], [t0]. [Nazwa Firmy], [t0]. [ContactName], [t0]. [KontaktT itle], [t0]. [Adres], [t0]. [City], [t0]. [Region], [t0]. [PostalCode], [t0]. [Radny try], [t0]. [Telefon], [t0]. [Faks] FROM [dbo]. [Klienci] AS [t0] GDZIE [t0]. [CustomerID] JAK @p0 -- @p0: Ciąg wejściowy (rozmiar = 5; Prec = 0; Skala = 0) [%ISSA] Zaczynając od ARO, dzika karta ogonowa:
var q = (z c w db. Klienci gdzie c.CustomerID.StartsWith("ARO") Wybierz c). ToList(); Generowany przez niego SQL to
WYBIERZ [t0]. [CustomerID], [t0]. [Nazwa Firmy], [t0]. [ContactName], [t0]. [KontaktT itle], [t0]. [Adres], [t0]. [City], [t0]. [Region], [t0]. [PostalCode], [t0]. [Radny try], [t0]. [Telefon], [t0]. [Faks] FROM [dbo]. [Klienci] AS [t0] GDZIE [t0]. [CustomerID] JAK @p0 -- @p0: Ciąg wejściowy (rozmiar = 4; Prec = 0; Skala = 0) [ARO%]
Linq oferuje także metodę o nazwie SqlMethods.Like, która wymaga najpierw dodania przestrzeni nazw System.Data.Linq.SqlClient. Powyższe trzy można zapisać
var q = (z c w db. Klienci gdzie SqlMethods.Like(c.CustomerID, "%ROUT%") Wybierz c). ToList(); Tutaj musisz sam wypełnić dziką kartę, żeby powiedzieć Linqowi, jak się dopasowałeś do siebie. Na przykład co
var q = (z c w db. Klienci gdzie SqlMethods.Like(c.CustomerID, "%ISSA") Wybierz c). ToList(); Inny przykład:
var q = (z c w db. Klienci gdzie SqlMethods.Like(c.CustomerID, "ARO%") Wybierz c). ToList(); Najbardziej niesamowitą rzeczą w SqlMethods.Like jest to, że możesz zaimplementować wolne karty dowolnie z własnymi zdefiniowanymi wyrażeniami wildcardów. Na przykład co
var q = (z c w db. Klienci gdzie SqlMethods.Like(c.CustomerID, "A%O%T") Wybierz c). ToList(); Generowany przez niego SQL to
WYBIERZ [t0]. [CustomerID], [t0]. [Nazwa Firmy], [t0]. [ContactName], [t0]. [KontaktT itle], [t0]. [Adres], [t0]. [City], [t0]. [Region], [t0]. [PostalCode], [t0]. [Radny try], [t0]. [Telefon], [t0]. [Faks] FROM [dbo]. [Klienci] AS [t0] GDZIE [t0]. [CustomerID] JAK @p0 -- @p0: Ciąg wejściowy (rozmiar = 5; Prec = 0; Skala = 0) [A%O%T]
Najstandardzniejsze jest wiedzieć, że zaczyna się na A i kończy na T, zna wartość O w środku i nie zna nic więcej. Po prostu użyj tego. SQL Server definiuje cztery dzikie karty, z których wszystkie są dostępne tutaj. Są to: Przykład znaku dzikiego Opis{filter}tion % Dowolny ciąg znaków z zera lub więcej znaków. GDZIE tytuł TAKI jak '%computer%' znajduje wszystkie tytuły książek z słowem 'komputer' gdziekolwiek w tytule. _ (podkreślenie) Dowolny pojedynczy znak. GDZIE au_fname JAK '_ean' znajduje wszystkie czteroliterowe imiona kończące się na ean (Dean, Sean i tak dalej). [ ] Dowolny pojedynczy znak w określonym zakresie ([a-f]) lub zbiorze ([abcdef]). GDZIE au_lname JAK '[C-P]arsen' znajduje nazwiska autorów kończące się na arsen i zaczynające się od dowolnego znaku pomiędzy C a P, na przykład Carsen, Larsen, Karsen i tak dalej. [^] Dowolny pojedynczy znak niemieszczący się w określonym zakresie ([^a-f]) lub zbiorze ([^abcdef]). GDZIE au_lname JAK 'de[^l]%' wszystkie nazwiska autorów zaczynające się na de i gdzie następna litera nie jest l.
% oznacza ciąg o zerowej długości lub dowolnej długości. _ oznacza postać. [] oznacza znak w określonym zakresie. [^] oznacza znak, który nie znajduje się w określonym zakresie Na przykład co:
var q = (z c w db. Klienci gdzie SqlMethods.Like(c.CustomerID, "A_O_T") Wybierz c). ToList(); Po prostu użyj _, aby przedstawić postać. Wygenerowany SQL to:
WYBIERZ [t0]. [CustomerID], [t0]. [Nazwa Firmy], [t0]. [ContactName], [t0]. [KontaktT itle], [t0]. [Adres], [t0]. [City], [t0]. [Region], [t0]. [PostalCode], [t0]. [Radny try], [t0]. [Telefon], [t0]. [Faks] FROM [dbo]. [Klienci] AS [t0] GDZIE [t0]. [CustomerID] JAK @p0 -- @p0: Ciąg wejściowy (rozmiar = 5; Prec = 0; Skala = 0) [A_O_T]
W przypadku Not Like to też bardzo proste, wystarczy dodać jakiś nonsens.
var q = (z c w db. Klienci gdzie! SqlMethods.Like(c.CustomerID, "A_O_T") Wybierz c). ToList();
SqlMethods.Like ma także parametr zwany znakiem escape, który zostanie przetłumaczony na instrukcje podobne do następujących.
WYBIERZ kolumny Z tabeli, gdzie kolumna JAK '%\%%' ESCAPE '\' escape wynika, ponieważ pole zawiera specjalne znaki, takie jak %,_ [ ], które są używane jako karty dzikie. I tu wkracza Ucieczka. To jest kwestia SQL Servera.
|