LINQ包含大小写不敏感
这段代码区分大小写,如何区分大小写?
public IQueryable<FACILITY_ITEM> GetFacilityItemRootByDescription(string description)
{
return this.ObjectContext.FACILITY_ITEM.Where(fi => fi.DESCRIPTION.Contains(description));
}
fi => fi.DESCRIPTION.ToLower().Contains(description.ToLower())
如果LINQ查询在数据库上下文中执行,则对Contains()
的调用将映射到LIKE
运算符:
.Where(a => a.Field.Contains("hello"))
变成了Field LIKE '%hello%'
。 LIKE
运算符默认情况下不区分大小写,但可以通过更改列的排序规则来更改。
如果在.NET上下文中执行LINQ查询,则可以使用IndexOf(),但该方法在LINQ to SQL中不受支持。
LINQ to SQL不支持将CultureInfo作为参数的方法,可能是因为它无法保证SQL Server处理的文化与.NET相同。 这不完全正确,因为它支持StartsWith(string, StringComparison)
。
但是,它似乎并不支持在LINQ to SQL中对LIKE
进行求值的方法,也不支持在.NET中进行不区分大小写的比较,因此无法以一致的方式执行不区分大小写的Contains()。
假设我们在这里使用字符串,下面是使用IndexOf()
的另一个“优雅”解决方案。
public IQueryable<FACILITY_ITEM> GetFacilityItemRootByDescription(string description)
{
return this.ObjectContext.FACILITY_ITEM
.Where(fi => fi.DESCRIPTION
.IndexOf(description, StringComparison.OrdinalIgnoreCase) != -1);
}
链接地址: http://www.djcxy.com/p/75197.html