我有一张表,我需要在其中对文本字段进行不区分大小写的搜索。
如果我在 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);
nvarchar(50)
该列在 SQL Server 2008中定义为 a 。
** 更新 **
我有一个带有 IQueryable 属性的部分类(对于我的 Linq-To-SQL 中的一个实体),但是以某种方式从 EntitySet 返回 IQueryable 导致我以后的查询以 IEnumerable(读取 Linq-To-Objects)的方式运行尽管他们对 IQueryable 类型起作用。