テキストフィールドで大文字と小文字を区別しない検索を実行する必要があるテーブルがあります。
このクエリをデータベースのLinqPadで直接実行すると、期待どおりに機能します
Table.Where(tbl => tbl.Title.Contains("StringWithAnyCase"))
// also, adding in the same constraints I'm using in my repository works in LinqPad
// Table.Where(tbl => tbl.Title.Contains("StringWithAnyCase") && tbl.IsActive == true)
私のアプリケーションには、初期フィルタリングを行うIQueryableオブジェクトを公開するリポジトリがあります。これは次のようになります。
var dc = new MyDataContext();
public IQueryable<Table> GetAllTables()
{
var ret = dc.Tables.Where(t => t.IsActive == true);
return ret;
}
コントローラ(MVCアプリ)では、LinqPadクエリを模倣するために次のようなコードを使用します。
var rpo = new RepositoryOfTable();
var tables = rpo.GetAllTables();
// for some reason, this does a CASE SENSITIVE search which is NOT what I want.
tables = tables.Where(tbl => tbl.Title.Contains("StringWithAnyCase");
return View(tables);
この列は、SQLServer2008でとして定義されていnvarchar(50)
ます。
** アップデート **
IQueryableプロパティを持つ部分クラス(Linq-To-SQLのエンティティの1つ)がありましたが、どういうわけかEntitySetからIQueryableを返すと、後のクエリがIEnumerable(Linq-To-Objectsを読み取る)の方法で動作するようになりました。彼らはIQueryable型に作用していましたが。