c#包含不区分大小写的搜索

本文关键字:搜索 大小写 包含不 | 更新日期: 2023-09-27 17:58:01

我有以下代码

var returnData = DemoData.Books.AsQueryable();
if (criteria.Author != string.Empty)
{
    returnData = returnData.Where(x => x.Author.Contains(criteria.Author));
}

我如何使where子句不区分大小写?

c#包含不区分大小写的搜索

  1. 您可以使用ToLower()函数。ToLower将字符串更改为全部小写。它转换整个字符串,而不更改已经小写的字母或数字。它复制一个字符串并返回对新字符串的引用。因此,在查询之外声明criteria.Author.ToLower()总是更好的选择。

    string lowerAuthor = criteria.Author.ToLower();
    returnData = returnData.Where
            (x => x.Author.ToLower().Contains(lowerAuthor));
    
  2. 您也可以将IndexOf重载与StringComparison枚举一起使用。它将为您提供比ToLower()更好的性能。此过载的特征是:

    int string.IndexOf(string value, StringComparison comparisonType);
    

    returnData = returnData.Where
        (x => x.Author.IndexOf(criteria.Author, StringComparison.CurrentCultureIgnoreCase) != -1);
    
returnData = returnData.Where
        (x => x.Author.IndexOf(criteria.Author, StringComparison.CurrentCultureIgnoreCase) != -1)

它根本不会进行额外的字符串分配。

我假设它是LINQ to Objects查询。