首页 / .NET / 正文

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

6022 发布于: 2018-03-07 读完约需4分钟

问题描述

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

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: [SQL Server]SQL Server如何重命名一个数据表的表名?

下一篇: [LINQ].NET/C#程序开发中如何如何检查一个集合是否为空?

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

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册