私は昨日、この昨日私の頭を傷つけずに汗をかきました。Linq Where句は、null文字列でString.Contains(String)を実行するときに期待しているものを返さない
string SearchTag = "";
Extension.getDBService<MyClass>().FindAll(i => <true condition>);
これは私が期待していたすべてのMyClass DBレコードを返しました。
string SearchTag = "";
Extension.getDBService<MyClass>().FindAll(i => <true condition> && i.TAG.ToLower().Trim().Contains(SearchTag.ToLower().Trim()));
これは0 Countコレクションを返しました。ぜんぜんわかりません。
string SearchTag = "e";
Extension.getDBService<MyClass>().FindAll(i => <true condition> && i.TAG.ToLower().Trim().Contains(SearchTag.ToLower().Trim()));
これは、すべてのMyClass DBレコードを含むコレクションを再度返します。 i.TAGには常に「e」が含まれているため、これは正常です。
なぜ2番目の式で0メンバーコレクションが得られますか? "文字列"。包含( "")は常に真でなければなりませんか?
PS:Extension.getDBService()は途中でDBContextを呼び出すことです。
Thx
'SearchTag'は空の文字列であり、' null'ではありませんか? 2つは非常に異なっています(SQLでは 'null'はデフォルトでほとんどすべての操作を伝播し、「偽」です)。あなたが実際に投稿しているコードがあなたが記述している振る舞いを表示していることを確認してください。しかし、フィルタは何もフィルタリングする必要がない場合、フィルタを含める必要はほとんどありません。クエリを1つの 'FindAll'にすべて入れるのではなく、あなた自身でたくさんの問題を解決します:) – Luaan
"文字列 ".Contains(" ")は常に真であるべきですか? - 私はそうは思わない。あなたの空の文字列を検索した後でなければなりません。 –