Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 20728|Odpowiedź: 0

[Źródło] Jak zapytanie rozmyte w Linq do SQL

[Skopiuj link]
Opublikowano 07.09.2015 23:16:28 | | |
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.





Poprzedni:Optymalizacja wydajności strony internetowej: Szczegółowe wyjaśnienie ustawień sterowania pamięcią podręczną
Następny:Ruijie zawsze był zdeterminowany, co się dzieje
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com