|
Неправильный результат выборки при использовании string.Contains(string)
|
|||
---|---|---|---|
#18+
EF6. Использую последнюю версию SQLite.EF6. Результат запроса: Код: c# 1. 2. 3. 4.
возвращает 7 записей: 1 правильную и 6 неправильных и генерит SQL: Код: sql 1. 2. 3. 4.
Результат запроса: Код: c# 1. 2. 3. 4.
возвращает 14 записей: 1 правильную и 13 неправильных и генерит SQL: Код: sql 1. 2. 3. 4.
cityNames - это IEnumerable<string>. Почему такое происходит и как можно исправить? Если я правильно понимаю, SQLite провайдер генерит понятный для БД запрос. Но в SQLite вроде как нет функции CHARINDEX. Как провайдер тогда мог транслировать Contains в CHARINDEX? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2014, 17:04 |
|
Неправильный результат выборки при использовании string.Contains(string)
|
|||
---|---|---|---|
#18+
а как по вашему должно выглядеть ваш запрос? напишите запрос на обычном скул. увидите свою ошибку. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2014, 09:53 |
|
Неправильный результат выборки при использовании string.Contains(string)
|
|||
---|---|---|---|
#18+
handmadeFromRu, Написал бы с обычным like. В чем же моя ошибка? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2014, 13:53 |
|
Неправильный результат выборки при использовании string.Contains(string)
|
|||
---|---|---|---|
#18+
Во-первых, в первом сообщении явно перепутаны между собой полученные SQL-запросы. Во-вторых, вы не приводите конкретных данных "1 правильную и 6 неправильных", нам нечего даже оценить В-третьих, к SQLite подключаются расширяющие библиотеки, которые могут содержать CHARINDEX в том числе ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2014, 14:16 |
|
Неправильный результат выборки при использовании string.Contains(string)
|
|||
---|---|---|---|
#18+
Shocker.Pro, Точно, перепутал запросы. Запрос Contains(): Код: sql 1. 2. 3. 4. 5.
дает результат: Дніпропетровська область Житомирська область Закарпатська область Івано - Франківська область Київська обл Кіровоградська область Миколаївська область Полтавська область Тернопільська область Харківська область Хмельницька область Черкаська область Чернівецька область Чернігівська область ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2014, 09:33 |
|
Неправильный результат выборки при использовании string.Contains(string)
|
|||
---|---|---|---|
#18+
Nickopoll, напишите запрос с like и передачей в него массива(cityNames внешняя коллекция для sql если я правильно понимаю). У вас выход один материализовать и в памяти уже обработать через Contains. для теста можете сделать так Код: c# 1. 2. 3.
и должен быть в sql like ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2014, 09:45 |
|
Неправильный результат выборки при использовании string.Contains(string)
|
|||
---|---|---|---|
#18+
handmadeFromRu, Мда, с like я поспешил - на то, что передается массив не обратил внимание, спасибо. Но все же, я не понимаю, почему CHARINDEX при передачи просто константы 'Київ' (не в массиве) дает тот же странный результат? "Материализовать" в смысле вернуть коллекцию областей и делее LINQ to Objects? Да так я и сделал пока что. В связи с этим вопрос: как этот влияет на производительность? Ведь SQLite - встраиваемая БД и все операции все равно выполняются у клиента в памяти. Если возвращать все записи из таблицы, а потом обрабатывать с помощью LINQ to Objects, что-то изменится? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2014, 11:56 |
|
Неправильный результат выборки при использовании string.Contains(string)
|
|||
---|---|---|---|
#18+
NickopollНо все же, я не понимаю, почему CHARINDEX при передачи просто константы 'Київ' (не в массиве) дает тот же странный результат? ну поиск беглый по so пишут что должен быть like, не работал с SQLite и не могу судить. Надо смотреть в сорсы если вообще есть. Nickopoll"Материализовать" в смысле вернуть коллекцию областей и делее LINQ to Objects? ага вернуть список Код: c# 1. 2. 3. 4. 5. 6. 7.
Nickopoll В связи с этим вопрос: как этот влияет на производительность? памяти сожрет больше, так как больше данных перелопатить и чуть медленнее будет. Все зависит на сколько бд большая. Можешь поизголяться и в цикле проходить по cityNames и для каждого города вытаскиваться state.ID (правда если like не получается то вариант отпадает) а потом запихивать в общий списко id если такого не было. тут даже set<int> уместнее будет если не хочешь проверки делать был ли элемент или нет. Но тогда у тебя будет n- запросов в бд, вместо 1 большого. Экспериментируй либ долбить бд либ в память загрузить быстрее будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2014, 13:01 |
|
|
start [/forum/search_topic.php?author=Vktrvktr&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
151ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 597ms |
total: | 870ms |
0 / 0 |