var Result = addressContext.Address_Lookup
.Where(c => c.Address_Full.ToUpper().Contains(term.ToUpper())
|| c.Address_Full.ToUpper().Contains(TermModified.ToUpper()))
.Select(e => new {
id = e.Address_ID,
label = e.Address_Full,
value = e.Address_Full })
.ToList();
为确保搜索不区分大小写,我使用的是ToUpper()
。
我正在寻找像吉米这样的东西(有一个大写的J)。吉米(全是小写)没有抓住?为什么呢?
答案 0 :(得分:2)
由于你正在使用实体框架,一个linq-to-sql框架,你实际上是在尝试让数据库执行一个.ToUpper
,而不是像运行一个内存那样执行一个内存。 IEnumerable
。如果框架中的查询转换不支持该函数,则它将不会被使用或抛出异常。
您通常可以通过检查是否针对IQueryable
对象调用函数来预测此类行为,该对象将所有调用排队为用于翻译的表达式树,或IEnumerable
,其使用{foreach
1}}和yield return
来处理评估。由于Linq函数是扩展方法,因此多态性不适用于此。
如果您不担心从内存表中获取每个条目的性能影响,请添加.AsEnumerable()
调用,您的函数将评估本地化数据。
var Result = addressContext.Address_Lookup
.AsEnumerable()
.Where(c => c.Address_Full.ToUpper().Contains(term.ToUpper())
|| c.Address_Full.ToUpper().Contains(TermModified.ToUpper()))
.Select(e => new
{
id = e.Address_ID,
label = e.Address_Full,
value = e.Address_Full
})
.ToList();