Die Funktionsweise von Like ist ein bisschen wie in, aber die Richtung hat sich geändert. Was bedeutet das? Du gibst eine Zeichenkette an und suchst nach einem Feld in den Daten, das diesen Zeichenstring enthält. Das heißt, eine gegebene Zeichenkette ist eine Teilmenge eines Körpers. SQL scrip{filter}t ist so geschrieben.
Wähle * aus der Tabelle, in der ich '%AD%' möchte. Wähle * aus der Tabelle, in der ich '%AD' möchte Selec * aus der Tabelle, bei der ich 'AD%' möchte Der oben genannte % ist eine Jokerkarte, die anzeigt, dass das Feld einen Wert enthält, und die unbekannte Position wird durch % ersetzt. Das erste soll angeben, dass der mittlere Abschnitt AD ist und die beiden Enden unklar sind. Die zweite ist AD am Ende, und die vorherige ist unklar. Die dritte hingegen beginnt mit AD und endet unklar. Die entsprechende Linq-Aussage lautet:
var q = (aus c in db. Kunden wobei c.CustomerID.Contains("ROUT") wählen Sie C). ToList(); Das erzeugte SQL ist
SELECT [t0]. [Kunden-ID], [t0]. [Firmenname], [t0]. [KontaktName], [t0]. [KontaktT] itle], [t0]. [Adresse], [t0]. [Stadt], [t0]. [Region], [t0]. [Postleitzahl], [t0]. [Rat versuchen], [t0]. [Telefon], [t0]. [Fax] VON [dbo]. [Kunden] AS [t0] WO [t0]. [Kunden-ID] WIE @p0 -- @p0: Eingabestring (Größe = 6; Prec = 0; Skala = 0) [%ROUT%] Abschließend mit ISSA, Head-Wildcard:
var q = (aus c in db. Kunden wobei c.CustomerID.EndsWith("ISSA") wählen Sie C). ToList(); Das erzeugte SQL ist
SELECT [t0]. [Kunden-ID], [t0]. [Firmenname], [t0]. [KontaktName], [t0]. [KontaktT] itle], [t0]. [Adresse], [t0]. [Stadt], [t0]. [Region], [t0]. [Postleitzahl], [t0]. [Rat versuchen], [t0]. [Telefon], [t0]. [Fax] VON [dbo]. [Kunden] AS [t0] WO [t0]. [Kunden-ID] WIE @p0 -- @p0: Eingabestring (Größe = 5; Prec = 0; Skala = 0) [%ISSA] Beginnend mit ARO, Schwanz-Wildcard:
var q = (aus c in db. Kunden wobei c.CustomerID.StartsWith("ARO") wählen Sie C). ToList(); Das erzeugte SQL ist
SELECT [t0]. [Kunden-ID], [t0]. [Firmenname], [t0]. [KontaktName], [t0]. [KontaktT] itle], [t0]. [Adresse], [t0]. [Stadt], [t0]. [Region], [t0]. [Postleitzahl], [t0]. [Rat versuchen], [t0]. [Telefon], [t0]. [Fax] VON [dbo]. [Kunden] AS [t0] WO [t0]. [Kunden-ID] WIE @p0 -- @p0: Eingabestring (Größe = 4; Prec = 0; Skala = 0) [ARO%]
Linq bietet außerdem eine Methode namens SqlMethods.Like an, bei der zuerst der Namensraum System.Data.Linq.SqlClient hinzugefügt werden muss. Die oben genannten drei können geschrieben werden
var q = (aus c in db. Kunden wobei SqlMethods.Like(c.CustomerID, "%ROUT%") wählen Sie C). ToList(); Hier musst du die Jokerkarte selbst ausfüllen, um Linq zu sagen, wie du gematcht hast. Zum Beispiel
var q = (aus c in db. Kunden wobei SqlMethods.Like(c.CustomerID, "%ISSA") wählen Sie C). ToList(); Ein weiteres Beispiel:
var q = (aus c in db. Kunden wobei SqlMethods.Like(c.CustomerID, "ARO%") wählen Sie C). ToList(); Das Erstaunlichste an SqlMethods.Like ist, dass man überall Wildcards mit eigenen definierten Wildcard-Ausdrücken implementieren kann. Zum Beispiel
var q = (aus c in db. Kunden wobei SqlMethods.Like(c.CustomerID, "A%O%T") wählen Sie C). ToList(); Das erzeugte SQL ist
SELECT [t0]. [Kunden-ID], [t0]. [Firmenname], [t0]. [KontaktName], [t0]. [KontaktT] itle], [t0]. [Adresse], [t0]. [Stadt], [t0]. [Region], [t0]. [Postleitzahl], [t0]. [Rat versuchen], [t0]. [Telefon], [t0]. [Fax] VON [dbo]. [Kunden] AS [t0] WO [t0]. [Kunden-ID] WIE @p0 -- @p0: Eingabestring (Größe = 5; Prec = 0; Skala = 0) [A%O%T]
Das Standardisierte ist zu wissen, dass es mit A beginnt und mit T endet, einen Wert O in der Mitte kennt und sonst nichts kennt. Nimm einfach das hier. SQL Server definiert vier Wildcards, die alle hier verfügbar sind. Sie sind: Beispiel für Wildcard-Charakter Descrip{filter}tion % Jede Zeichenkette von null oder mehr Zeichen. WO Titel WIE '%computer%' alle Buchtitel mit dem Wort 'computer' irgendwo im Buchtitel findet. _ (unterstreichen) Jeder einzelne Charakter. WO au_fname WIE '_ean' alle vierbuchstabigen Vornamen findet, die auf ean enden (Dean, Sean und so weiter). [ ] Jedes einzelne Zeichen innerhalb des angegebenen Bereichs ([a-f]) oder der Menge ([abcdef]). WO au_lname WIE '[C-P]arsen' Nachnamen der Autoren findet, die mit arsen enden und mit jedem einzelnen Zeichen zwischen C und P beginnen, zum Beispiel Carsen, Larsen, Karsen und so weiter. [^] Jedes einzelne Zeichen, das nicht innerhalb des angegebenen Bereichs ([^a-f]) oder der Menge ([^abcdef]) liegt. WOBEI au_lname WIE 'de[^l]%' alle Nachnamen der Autoren mit de beginnen und wobei der folgende Buchstabe nicht l ist.
% steht für eine Kette von null Länge oder jeder beliebigen Länge. _ zeigt einen Charakter an. [] bezeichnet ein Zeichen in einem Reichweitenbereich. [^] kennzeichnet ein Zeichen, das nicht in einem bestimmten Bereich liegt Zum Beispiel:
var q = (aus c in db. Kunden wobei SqlMethods.Like(c.CustomerID, "A_O_T") wählen Sie C). ToList(); Benutze einfach _, um einen Charakter darzustellen. Das generierte SQL ist:
SELECT [t0]. [Kunden-ID], [t0]. [Firmenname], [t0]. [KontaktName], [t0]. [KontaktT] itle], [t0]. [Adresse], [t0]. [Stadt], [t0]. [Region], [t0]. [Postleitzahl], [t0]. [Rat versuchen], [t0]. [Telefon], [t0]. [Fax] VON [dbo]. [Kunden] AS [t0] WO [t0]. [Kunden-ID] WIE @p0 -- @p0: Eingabestring (Größe = 5; Prec = 0; Skala = 0) [A_O_T]
Für Not Like ist es auch sehr einfach: Füge einfach einen Unsinn hinzu.
var q = (aus c in db. Kunden Wo ! SqlMethods.Like(c.CustomerID, "A_O_T") wählen Sie C). ToList();
SqlMethods.Like hat ebenfalls einen Parameter namens Escape-Zeichen, der in eine folgende Anweisung übersetzt wird.
WÄHLE Spalten AUS der Tabelle WO Spalte WIE '%\%%' ESCAPE '\' Escape ist, weil ein Feld spezielle Zeichen wie %,_ [ ] enthält, die als Wildcards verwendet werden. Hier kommt Escape ins Spiel. Das ist eine SQL-Server-Sache.
|