Ich habe die Ankündigung von Entity Framework Core 2.0 gelesen Ссылка
Es heißt, dass sie neue Sql-Funktionen wie EF.Functions.Like
hinzugefügt haben, um die Operation SQL LIKE
auszuführen.
Ich frage mich, was wäre dann der Unterschied zwischen EF.Functions.Like
und string.Contains
/ StartsWith
?
Zum Beispiel:
%Vor% Was wäre der Unterschied zwischen den beiden Versionen?
EF weiß bereits, wie man string.Contains
/ StartsWith
in die entsprechenden SQL-Operationen übersetzt, oder?
Der einzige Grund, an den ich denken kann, ist, dass EF.Functions.Like komplexere Muster wie "a%b%"
ermöglichen würde (obwohl dieser als StartsWith("a") && Contains("b")
geschrieben werden kann)
Ist das der Grund?
Like query unterstützt Platzhalterzeichen und ist daher in einigen Szenarien sehr nützlich im Vergleich zu den String-Erweiterungsmethoden.
Zum Beispiel: Wenn wir alle 4 Buchstabennamen mit 'ri' als mittlere Zeichen suchen würden, könnten wir EF.Functions.Like(c.Name, "_ri_");
oder um alle Kunden von Städten zu bekommen, die mit Vokalen beginnen:
%Vor%Die Antwort von @adiga ist ziemlich unvollständig und deckt nur einen Teil der Unterschiede in der Benutzung ab.
.StartsWith(...)
, .Contains(...)
und .EndsWith(...)
werden jedoch auch anders in SQL übersetzt als EF.Functions.Like
.
Zum Beispiel wird .StartsWith
als (string LIKE pattern + "%" AND CHARINDEX(pattern, string) = 1) OR pattern = ''
übersetzt, wobei .Contains
in (CHARINDEX(pattern, string) > 0) OR pattern = ''
übersetzt wird.
EF.Functions.Like
wird jedoch in string LIKE pattern [ESCAPE escapeChar]
übersetzt.
Dies kann sich auch auf die Leistung auswirken. Das oben genannte gilt für den Anbieter EF Core SqlServer . Andere EF Core-Anbieter können es anders übersetzen.
Tags und Links c# entity-framework