问题描述
在.NET/C#程序开发中,我们很多时候需要使用LINQ在忽略大小写的情况下判断是否包含某个字符串?如下的实现:
public IQueryable<FACILITY_ITEM> GetFacilityItemRootByDescription(string description)
{
return this.ObjectContext.FACILITY_ITEM.Where(fi => fi.DESCRIPTION.Contains(description));
}
上述的实现是区分大小写的。那么,如何使用LINQ
在不区分大小写的情况下判断是否包含某个字符串的功能呢?
方案一
使用.ToLower()
方法,先将字符串先转换成小写的,如下:
fi => fi.DESCRIPTION.ToLower().Contains(description.ToLower())
方案二
使用IndexOf(...)
方法,然后使用StringComparison.OrdinalIgnoreCase
参数的重载方法,如下:
public IQueryable<FACILITY_ITEM> GetFacilityItemRootByDescription(string description)
{
return this.ObjectContext.FACILITY_ITEM
.Where(fi => fi.DESCRIPTION
.IndexOf(description, StringComparison.OrdinalIgnoreCase) != -1);
}
方案三
以上两种方案均未考虑要查找的字符串为空的情况,以下的实现考虑到了为null
的情况,这样实现或许代码更加安全,稳定:
fi => (fi.DESCRIPTION ?? string.Empty).ToLower().Contains((description ?? string.Empty).ToLower())
方案四
我们还可以使用string.Compare(...)
方法,如下:
lst.Where(x => string.Compare(x,"valueToCompare",StringComparison.InvariantCultureIgnoreCase)==0);
或者
lst.Any(x => string.Compare(x,"valueToCompare",StringComparison.InvariantCultureIgnoreCase)==0)
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册