13

私はエンティティへのlinqでこのような結果セットをクエリしようとしています;

var categoriesList = _catRepo.GetAllCategories();


 filteredCategories = categoriesList.Where(c=> c.CategoryName.Contains("for"));

CategoryNameただし、データベースにあるため、結果は得られませんFor(Upper Case)。SQLサーバーの照合順序も確認しましたが、_CI_ASに設定されています。大文字と小文字を区別しない文字列をフィルター処理するために contains を使用する方法がわかりませんか? 誰かが次のように入力した場合、基本的に欲しいです。

 filteredCategories = categoriesList.Where(c=> c.CategoryName.Contains("for"));

また

filteredCategories = categoriesList.Where(c=> c.CategoryName.Contains("For"));

結果は同じはずです

4

2 に答える 2

18

これを試して

filteredCategories = categoriesList.Where(c=>
 c.CategoryName.IndexOf("for", StringComparison.OrdinalIgnoreCase) >= 0)

以下に示すように、Containsメソッドは機能します

public bool Contains(string value)
{
   return this.IndexOf(value, StringComparison.Ordinal) >= 0;
}
于 2013-03-12T13:49:58.480 に答える
7

前のIndexOf答えはうまくいくはずです。データベースからすべてのエンティティをロードしてから、メモリ内(オブジェクトへのlinq)フィルターを実行しているため、データベースでは何も実行していません。

これも機能するはずです(私が参照した投稿から)

filteredCategories = categoriesList.Where(c=> c.CategoryName.ToLower().Contains("for"));

余談ですが、カテゴリがたくさんある場合は、データベースからすべてをフェッチしてメモリでフィルタリングするのではなく、データベースでフィルタリングすることをお勧めします。

于 2013-03-12T13:57:14.693 に答える