LINQ To Entities содержит конфиденциальный поиск

Я пытаюсь запросить мой набор результатов, как это в linq для сущностей;

var categoriesList = _catRepo.GetAllCategories();


 filteredCategories = categoriesList.Where(c=> c.CategoryName.Contains("for"));

Однако я не получаю никакого результата, потому что CategoryName есть For(Upper Case) в базе данных. Я также проверил сортировку sql-сервера и установлен на _CI_AS. Я понятия не имею как использовать содержит для фильтрации нечувствительной к регистру строки? Я хочу, если кто-то типа типа;

 filteredCategories = categoriesList.Where(c=> c.CategoryName.Contains("for"));

ИЛИ

filteredCategories = categoriesList.Where(c=> c.CategoryName.Contains("For"));

Результат должен быть тем же самым

Ответ 1

Попробуйте это

filteredCategories = categoriesList.Where(c=>
 c.CategoryName.IndexOf("for", StringComparison.OrdinalIgnoreCase) >= 0)

Содержит метод, как показано ниже

public bool Contains(string value)
{
   return this.IndexOf(value, StringComparison.Ordinal) >= 0;
}

Ответ 2

Предыдущий IndexOf ответ должен работать. Поскольку вы загружаете все сущности из базы данных, а затем выполняете на нем фильтр в памяти (linq to objects), вы вообще ничего не делаете в базе данных.

Это также должно работать (из поста, на который я ссылался)

filteredCategories = categoriesList.Where(c=> c.CategoryName.ToLower().Contains("for"));

В стороне, если у вас много категорий, вы можете захотеть отфильтровать их в базе данных, а не извлекать все из db и затем фильтровать их в памяти.