С# содержит регистр без учета регистра

У меня есть следующий код

var returnData = DemoData.Books.AsQueryable();

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

Как сделать регистр условия where неприемлемым?

Ответ 1

  • Вы можете использовать функцию ToLower(). ToLower изменяет строки на все строчные буквы. Он преобразует всю строку - без изменения букв, которые уже имеют нижнее значение или цифры. Он копирует строку и возвращает ссылку на новую строку. Так что лучше всегда объявлять criteria.Author.ToLower() вне запроса.

    string lowerAuthor = criteria.Author.ToLower();
    returnData = returnData.Where
            (x => x.Author.ToLower().Contains(lowerAuthor));
    
  • Вы также можете использовать перегрузку IndexOf с перечислением StringComparison. Это даст вам лучшую производительность, чем ToLower(). Подпись этой перегрузки:

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

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

Ответ 2

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

Он не добавит никакого дополнительного выделения строки.

Я предположил, что это запрос LINQ to Objects.