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

上一篇: LINQ Contains Case Insensitive

下一篇: C# Joins/Where with Linq and Lambda