Wir versuchen, den Operator "LIKE" in Entity Framework für unsere Entitäten mit Zeichenfolgenfeldern zu implementieren, aber er scheint nicht unterstützt zu werden. Hat jemand anderes versucht, so etwas zu tun?
Dieser Blog-Beitrag fasst das Problem zusammen, das wir haben. Wir könnten Includes verwenden, aber das entspricht nur dem trivialsten Fall für LIKE. Das Kombinieren von enthält, beginnt mit, endet mit und indexof bringt uns dorthin, erfordert jedoch eine Übersetzung zwischen Standard-Platzhaltern und Linq to Entities-Code.
Antworten:
Dies ist jetzt ein alter Beitrag, aber für alle, die nach einer Antwort suchen, sollte dieser Link helfen. Gehen Sie zu dieser Antwort, wenn Sie EF 6.2.x bereits verwenden. Auf diese Antwort, wenn Sie EF Core 2.x verwenden
Kurzfassung:
SqlFunctions.PatIndex Methode - die Startposition des ersten Auftretens eines Musters in einem angegebenen Ausdruck oder Nullen, wenn das Muster nicht gefunden wird, für alle gültigen Text- und Zeichendatentypen zurück
Namespace: System.Data.Objects.SqlClient Assembly: System.Data.Entity (in System.Data.Entity.dll)
Eine kleine Erklärung erscheint auch in diesem Forenthread .
quelle
Ich weiß eigentlich nichts über EF, aber in LINQ to SQL drücken Sie normalerweise eine LIKE-Klausel mit String.Contains aus:
wird übersetzt in
(Verwenden Sie
StartsWith
undEndsWith
für anderes Verhalten.)Ich bin mir nicht ganz sicher, ob das hilfreich ist, weil ich nicht verstehe, was Sie meinen, wenn Sie sagen, dass Sie versuchen, LIKE zu implementieren . Wenn ich völlig falsch verstanden habe, lass es mich wissen und ich werde diese Antwort löschen :)
quelle
Ich hatte das gleiche Problem.
Im Moment habe ich mich für die clientseitige Wildcard / Regex-Filterung entschieden, die auf http://www.codeproject.com/Articles/11556/Converting-Wildcards-to-Regexes?msg=1423024#xx1423024xx basiert - es ist einfach und funktioniert so erwartet.
Ich habe eine weitere Diskussion zu diesem Thema gefunden: http://forums.asp.net/t/1654093.aspx/2/10
Dieser Beitrag sieht vielversprechend aus, wenn Sie Entity Framework> = 4.0 verwenden:
Hinweis: Diese Lösung ist nur für SQL Server vorgesehen, da nicht standardmäßige PATINDEX-Funktionen verwendet werden.
quelle
Update: In EF 6.2 gibt es einen ähnlichen Operator
quelle
Where(obj => DbFunctions.Like(obj.Column , "%expression%")
?Es wird ein
LIKE
Operator hinzugefügt inEntity Framework Core 2.0
:Im Vergleich dazu wird
... where e.Title.Contains("developer") ...
esSQL
LIKE
eher übersetzt alsCHARINDEX
wir es für eineContains
Methode sehen.quelle
Es wird in der Dokumentation als Teil von Entity SQL ausdrücklich erwähnt. Erhalten Sie eine Fehlermeldung?
http://msdn.microsoft.com/en-us/library/bb399359.aspx
quelle
Wenn Sie MS SQL verwenden, habe ich zwei Erweiterungsmethoden geschrieben, um das% -Zeichen für die Platzhaltersuche zu unterstützen. (LinqKit ist erforderlich)
Verwendung
in ef6 und es sollte übersetzt werden
', @ p__linq__0 ='% He% llo% ', @ p__linq__1 ='% Hi% ', @ p__linq_2 ='% Active '
quelle
Für EfCore ist hier ein Beispiel zum Erstellen eines LIKE-Ausdrucks
quelle
Sie können ganz einfach ein echtes Like in Link to Entities verwenden
Hinzufügen
zu Ihrem EDMX in diesem Tag:
Denken Sie auch an den Namespace im
<schema namespace="" />
AttributFügen Sie dann eine Erweiterungsklasse in den obigen Namespace ein:
Diese Erweiterungsmethode wird nun der EDMX-Funktion zugeordnet.
Weitere Informationen hier: http://jendaperl.blogspot.be/2011/02/like-in-linq-to-entities.html
quelle