[LINQ].NET/C#程序开发LINQ如何在忽略/不区分大小写的情况下判断是否包含某个字符串?

.NET 作者: Rector 631阅读 0评论 0收藏 收藏本文

郑重申明:本文未经许可,禁止任何形式转载

问题描述

在.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)

阅读了该文章的人还浏览了...

本文永久链接码友网 » [LINQ].NET/C#程序开发LINQ如何在忽略/不区分大小写的情况下判断是否包含某个字符串?

发布于: 2018-03-07 20:12:56
分享扩散:

文章评论

获取验证码