Früher war dies bei älteren Versionen von EF Core der Fall. Jetzt string.Contains
unterscheidet zwischen Groß- und Kleinschreibung und zum Beispiel für sqlite wird es der sqlite-Funktion `instr()' zugeordnet (ich weiß es nicht für postgresql).
Wenn Sie Zeichenfolgen ohne Berücksichtigung der Groß-/Kleinschreibung vergleichen möchten, haben Sie DbFunctions, um die Arbeit zu erledigen.
context.Counties.Where(x => EF.Functions.Like(x.Name, $"%{keyword}%")).ToList();
UPDATE an @Gert:
Ein Teil der Annahme in der Frage ist falsch. string.Contains
wird NICHT in einen LIKE expression
umgewandelt obwohl es früher in ef-Core-Versionen <=1.0 der Fall war (glaube ich).
- Im SQLServer
string.contains
konvertiert inCHARINDEX()
, in Oracle und sqlite ininstr()
die standardmäßig zwischen Groß- und Kleinschreibung unterscheiden, ES SEI DENN, die Sortierung von Datenbanken oder Spalten ist anders definiert (wieder weiß ich es nicht für postgresql). - In allen Fällen
EF.Functions.Like()
konvertiert in ein SQLLIKE
Ausdruck, bei dem die Groß-/Kleinschreibung standardmäßig nicht beachtet wird, es sei denn, die DB- oder Spaltensortierung ist anders definiert.
Also ja, es läuft alles auf die Sortierung hinaus, aber - korrigieren Sie mich, wenn ich falsch liege - in gewisser Weise kann der Code einen Einfluss auf die Suche mit Berücksichtigung der Groß-/Kleinschreibung haben, je nachdem, welche der oben genannten Methoden Sie verwenden.
Jetzt bin ich vielleicht nicht ganz auf dem neuesten Stand, aber ich glaube nicht, dass EF-Core-Migrationen auf natürliche Weise mit der DB-Sortierung umgehen, und wenn Sie die Tabelle nicht bereits manuell erstellt haben, erhalten Sie am Ende die Standardsortierung (Groß- und Kleinschreibung für sqlite und I weiß ehrlich gesagt nicht für die anderen).
Um auf die ursprüngliche Frage zurückzukommen, Sie haben mindestens 2 Optionen, um diese Suche ohne Berücksichtigung der Groß-/Kleinschreibung durchzuführen, wenn nicht 3 in einer zukünftigen Version:
- Spezifizieren Sie die Spaltensortierung bei der Erstellung mit DbContext.OnModelCreating() mit diesem Trick
- Ersetzen Sie Ihre
string.Contains
durchEF.Functions.Like()
- Oder warten Sie auf ein vielversprechendes Feature, das noch diskutiert wird:
EF.Functions.Collate()
Funktion