代码之家  ›  专栏  ›  技术社区  ›  Jeaf Gilbert

LINQ包含不区分大小写的

  •  157
  • Jeaf Gilbert  · 技术社区  · 15 年前

    此代码区分大小写,如何使其不区分大小写?

    public IQueryable<FACILITY_ITEM> GetFacilityItemRootByDescription(string description)
    {
        return this.ObjectContext.FACILITY_ITEM.Where(fi => fi.DESCRIPTION.Contains(description));
    }
    
    9 回复  |  直到 15 年前
        1
  •  82
  •   Jeff Mercado    14 年前

    IndexOf() .

    public IQueryable<FACILITY_ITEM> GetFacilityItemRootByDescription(string description)
    {
        return this.ObjectContext.FACILITY_ITEM
            .Where(fi => fi.DESCRIPTION
                           .IndexOf(description, StringComparison.OrdinalIgnoreCase) != -1);
    }
    
        2
  •  249
  •   IluTov    11 年前
    fi => fi.DESCRIPTION.ToLower().Contains(description.ToLower())
    
        3
  •  127
  •   Sjoerd    10 年前

    Contains() 映射到 LIKE

    .Where(a => a.Field.Contains("hello")) Field LIKE '%hello%' . 这个 就像 运算符在默认情况下不区分大小写,但可以通过 changing the collation of the column .

    如果LINQ查询是在.NET上下文中执行的,则可以使用 IndexOf() ,但LINQ to SQL中不支持该方法。

    does not support methods 这可能是因为它不能保证SQL server处理的区域性与.NET相同。这不是完全正确的,因为 支持 StartsWith(string, StringComparison) .

    但是,它似乎不支持对 就像

        4
  •  12
  •   Shiva    8 年前

    这里接受的答案没有提到这样一个事实:如果您有一个空字符串,ToLower()将抛出一个异常。更安全的方法是:

    fi => (fi.DESCRIPTION ?? string.Empty).ToLower().Contains((description ?? string.Empty).ToLower())
    
        5
  •  7
  •   Alexei - check Codidact    8 年前

    使用C#6.0(它允许表达式体函数和空传播),对于LINQ到对象,可以在这样一行中完成(还可以检查空值):

    public static bool ContainsInsensitive(this string str, string value) => str?.IndexOf(value, StringComparison.OrdinalIgnoreCase) >= 0;
    
        6
  •  5
  •   Menelaos Vergis    6 年前

    return this
       .ObjectContext
       .FACILITY_ITEM
       .Where(fi => fi.DESCRIPTION.IndexOf(description, StringComparison.OrdinalIgnoreCase)>=0);
    
        7
  •  3
  •   Code First    8 年前

    你可以使用string.Compare

        lst.Where(x => string.Compare(x,"valueToCompare",StringComparison.InvariantCultureIgnoreCase)==0);
    

      lst.Any(x => string.Compare(x,"valueToCompare",StringComparison.InvariantCultureIgnoreCase)==0)
    
        8
  •  1
  •   E Rolnicki    12 年前
    public static bool Contains(this string input, string findMe, StringComparison comparisonType)
    {
        return String.IsNullOrWhiteSpace(input) ? false : input.IndexOf(findMe, comparisonType) > -1;
    }
    
        9
  •  1
  •   Yanga    6 年前

    StringComparison.InvariantCultureIgnoreCase 为我做这件事:

    .Where(fi => fi.DESCRIPTION.Contains(description, StringComparison.InvariantCultureIgnoreCase));
    
        10
  •  0
  •   Henfs    5 年前

    老实说,这不需要太难。似乎一开始就是这样,但事实并非如此。这里有一个简单的linq查询,它完全按照请求执行。

    var results = ClientsRepository().Where(c => c.FirstName.ToLower().Contains(searchText.ToLower())).ToList();
    

        11
  •  -1
  •   Gericke    7 年前

    使用 字符串。等于

    public IQueryable<FACILITY_ITEM> GetFacilityItemRootByDescription(string description)
    {
        return this.ObjectContext.FACILITY_ITEM
               .Where(fi => fi.DESCRIPTION
               .Equals(description, StringComparison.OrdinalIgnoreCase));
    }