Ich habe eine Prozedur in SQL, die ich in Linq umwandeln möchte:
SELECT O.Id, O.Name as Organization
FROM Organizations O
JOIN OrganizationsHierarchy OH ON O.Id=OH.OrganizationsId
where OH.Hierarchy like '%/12/%'
Die Linie, mit der ich mich am meisten beschäftige, ist:
where OH.Hierarchy like '%/12/%'
Ich habe eine Spalte, in der die Hierarchie wie / 1/3/12 / gespeichert ist, also verwende ich nur% / 12 /%, um danach zu suchen.
Meine Frage ist, was entspricht Linq oder .NET der Verwendung des Prozentzeichens?
5
Stimmen für das Like-Operator- Tag. Könnte ich Sie bitten , SQL-like als Synonym vorzuschlagen ?Antworten:
Sie können auch
.StartsWith()
oder verwenden.EndsWith()
.quelle
StartsWith("abc")
wird umgewandelt inLIKE 'abc%'
undEndsWith("abc")
wird inLIKE '%abc'
.ToLower().Contains()
usw. nicht, wenn du den Fall ignorieren willst. Ob Sie dies möchten, hängt natürlich davon ab, ob Sie versuchen, LIKE aus einer Datenbank mit einer Sortierung ohne Berücksichtigung der Groß- und Kleinschreibung nachzuahmen oder nicht.Benutze das:
quelle
SqlMethods
die "Punktnotation"?System.Data.Linq.SqlClient
Namespace einschließen müssen .Ich gehe davon aus, dass Sie Linq-to-SQL * verwenden (siehe Hinweis unten). Verwenden Sie in diesem Fall string.Contains, string.StartsWith und string.EndsWith, um SQL zu generieren, das den SQL LIKE-Operator verwendet.
oder
Hinweis: * = Wenn Sie das ADO.Net Entity Framework (EF / L2E) in .net 3.5 verwenden, beachten Sie, dass es nicht dieselbe Übersetzung wie Linq-to-SQL ausführt. Obwohl L2S eine ordnungsgemäße Übersetzung ausführt, wird L2E v1 (3.5) in einen t-sql-Ausdruck übersetzt, der einen vollständigen Tabellenscan für die von Ihnen abgefragte Tabelle erzwingt, es sei denn, Ihre where-Klausel oder Join-Filter enthalten einen anderen besseren Diskriminator.
Update: Dies ist in EF / L2E v4 (.net 4.0) behoben, sodass genau wie bei L2S ein SQL LIKE generiert wird.
quelle
@
Zeichen entziehen , aber mir ist klar, dass dies möglicherweise nur eine gute Konvention ist.Wenn Sie VB.NET verwenden, lautet die Antwort "*". So würde Ihre where-Klausel aussehen ...
Hinweis: "*" Entspricht null oder mehr Zeichen. Hier ist der msdn-Artikel für den Like-Operator .
quelle
Nun, indexOf funktioniert auch bei mir
quelle
Verwenden Sie einen solchen Code
quelle
.NET Core hat jetzt
EF.Functions.Like
quelle
Wenn Sie nicht mit numerischen Zeichenfolgen übereinstimmen, ist es immer gut, einen allgemeinen Fall zu haben:
quelle
Ich mache immer das:
Ich weiß, dass ich die like-Anweisung nicht verwende, aber im Hintergrund funktioniert sie einwandfrei. Dies wird in eine Abfrage mit einer like-Anweisung übersetzt.
quelle
Versuchen Sie dies, das funktioniert gut für mich
quelle
quelle
Contains wird in Linq verwendet, genau wie Like in SQL.
. . .
Sie können Ihr SQL-Skript in Linq wie folgt schreiben:
quelle
Für diejenigen, die hier wie ich nach einem Weg zu einer "SQL Like" -Methode in LINQ suchen, gibt es etwas, das sehr gut funktioniert.
Ich bin in einem Fall, in dem ich die Datenbank in keiner Weise ändern kann, um die Spaltenkollatierung zu ändern. Also muss ich in meinem LINQ einen Weg finden, dies zu tun.
Ich verwende die Hilfsmethode,
SqlFunctions.PatIndex
die sich ähnlich wie der echte SQL LIKE-Operator verhält.Zuerst muss ich alle möglichen diakritischen Zeichen (ein Wort, das ich gerade gelernt habe) im Suchwert aufzählen, um Folgendes zu erhalten:
und dann in LINQ zum Beispiel:
Für meine Bedürfnisse habe ich eine Helper / Extension-Methode geschrieben
Wenn einer von Ihnen Vorschläge zur Verbesserung dieser Methode hat, werde ich mich freuen, Sie zu hören.
quelle
Viel zu spät, aber ich habe dies zusammengeschmissen, um String-Vergleiche mit Platzhaltern im SQL-ähnlichen Stil durchführen zu können:
quelle