У меня не очень получается искать на русском в SQLite средствами EF. Делаю так
if (!string.IsNullOrWhiteSpace(Filters.TextFilter))
query.AddFilter(f => f.LocalName.ToLower().Contains(Filters.TextFilter.ToLower()) ||
f.OriginalName.ToLower().Contains(Filters.TextFilter.ToLower()) ||
f.Description.ToLower().Contains(Filters.TextFilter.ToLower()));
Вот метод добавления фильтра
public void AddFilter(Expression<Func<T,bool>> filter)
{
_currentQuery = _currentQuery.Where(filter);
}
Когда в поисковой фразе русские слова, ищет как попало и че попало. Во первых, игнорирование регистра не работает при этом (а на английском все норм). Во вторых, когда пишу по русски с большой буквы (чтобы наверняка сработало), находит больше чем должен.
База в кодировке UTF-8
Первое, что пришло в голову - в VS строки в Unicode. Поэтому сделал так
byte[] bytes = null;
var str = string.Empty;
if (!string.IsNullOrWhiteSpace(Filters.TextFilter))
{
bytes = Encoding.Convert(Encoding.Unicode, Encoding.UTF8, Encoding.Unicode.GetBytes(Filters.TextFilter.ToUpper()));
str = Encoding.UTF8.GetString(bytes);
}
if (!string.IsNullOrWhiteSpace(Filters.TextFilter))
query.AddFilter(f => f.LocalName.ToUpper().Contains(str) ||
f.OriginalName.ToUpper().Contains(str) ||
f.Description.ToUpper().Contains(str));
Игнорирование регистра теперь работает нормально. Осталась проблема с неправильным поиском. Вот скрин
откуда там взялся Heaven? Я проверил в базе, в его полях нет вхождения "эпик". Что я делаю не так?
Кроме того, я посмотрел запрос, который формирует EF. Я не буду приводить его весь, приведу кусочек фильтра на вхождение строки.
(CHARINDEX(@p__linq__0, UPPER([Extent1].[LocalName]))) > 0
Я открываю SQLite Studio, чтобы самостоятельно создать запрос таким образом, но это не работает.
[13:09:38] Ошибка при выполнении SQL запроса к базе данных 'DB': no such function: CHARINDEX
Объясните кто нибудь что тут происходит?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
я знаю имейл календаря в который нужно вписать события, как это сделать программна черезnet?