我有一个表,我需要在文本字段上进行不区分大小写的搜索。
如果我直接在我的数据库中在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);
该列在SQL Server 2008中定义为nvarchar(50)
。
**更新**
我有一个部分类(对于我的一个来自Linq-To-SQL的实体)具有IQueryable属性,但不知何故从EntitySet返回IQueryable导致我的后续查询在IEnumerable中运行(读取Linq-To-Objects即使他们是在IQueryable类型上行事的方式。