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 и затем фильтровать их в памяти.