Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 20728|Antwort: 0

[Quelle] Wie Fuzzy Query in Linq zu SQL

[Link kopieren]
Veröffentlicht am 07.09.2015 23:16:28 | | |
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.





Vorhergehend:Website-Leistungsoptimierung: Detaillierte Erklärung der Cache-Control-Einstellungen
Nächster:Ruijie war schon immer entschlossen, was los ist
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com