Ich kratzte meinen Kopf für eine Stunde auf dieser gestern ohne Ergebnisse, aber Schweiß.Linq Where-Klausel, die nicht zurückgibt, was ich erwarte, wenn String.Contains (String) auf einer Null-Zeichenfolge
Dies gab mir alle meine MyClass DB-Datensätze, wie ich es erwarten würde.
string SearchTag = "";
Extension.getDBService<MyClass>().FindAll(i => <true condition> && i.TAG.ToLower().Trim().Contains(SearchTag.ToLower().Trim()));
Dies ergab eine 0 Count-Sammlung! Ich verstehe das nicht.
string SearchTag = "e";
Extension.getDBService<MyClass>().FindAll(i => <true condition> && i.TAG.ToLower().Trim().Contains(SearchTag.ToLower().Trim()));
Dies gibt eine Auflistung wieder, die alle MyClass DB-Datensätze enthält. Dies ist normal, da i.TAG immer "e" enthält.
Warum bekomme ich eine 0-Mitglieder-Sammlung mit dem zweiten Ausdruck? "String" .Contains ("") sollte immer wahr sein, oder?
PS: Extension.getDBService() ist übrigens ein Aufruf zu einem DBContext.
Danke für Ihre Unterstützung.
Entfernen Sie und probieren Sie es aus –
Sind Sie sicher, dass 'SearchTag' eine leere Zeichenfolge und keine' null' ist? Die beiden sind sehr unterschiedlich (in SQL wird "null" standardmäßig durch fast alle Operationen weitergegeben und ist "falsy"). Stellen Sie sicher, dass der Code, den Sie veröffentlichen, das von Ihnen beschriebene Verhalten anzeigt. Aber alles in allem gibt es wenig Grund für Sie, den Filter einzuschließen, wenn er nichts filtern soll - stellen Sie einfach Ihre Frage zusammen, anstatt alles in einen "FindAll" zu setzen, und Sie werden sich eine Menge Ärger ersparen :) – Luaan
" String ".Contains (" ") sollte immer wahr sein, oder? - Ich denke nicht. es funktioniert wie es sein sollte, seit du nach einer leeren Zeichenfolge suchst. –