ошибка в linq Содержит утверждение - есть ли исправление или обходной путь? - PullRequest
2 голосов
/ 13 сентября 2008

Я нашел ошибку в операторе Contains в Linq (не уверен, действительно ли это в Linq или Linq to SQL) и хочу узнать, видел ли кто-нибудь еще это и есть ли исправление или обходной путь.

Если в источнике запросов, с которым вы работаете, содержится более 10 элементов, он не передает элементы правильно в запрос SQL. Трудно объяснить, что он делает, пример покажет это лучше всего.

Если вы посмотрите на необработанный запрос, параметры будут выглядеть следующим образом:

@P0 = 'aaa'
@P1 = 'bbb'
@P2 = 'ccc'
... [@P3 through @P9]
@P10 = '111'
@P11 = '222'
... [@p12 through @P19]
@P20 = 'sss'
... [@P21 through @P99]
@P100 = 'qqq'

когда значения передаются в окончательный запрос (все параметры разрешены), он разрешает параметры, как если бы это были переданные значения:

@P0 = 'aaa'
@P1 = 'bbb'
@P2 = 'ccc'
...
@P10 = 'bbb'0
@P11 = 'bbb'1
...
@P20 = 'ccc'0
...
@P100 = 'bbb'00

Таким образом, похоже, что параметр разрешения просматривает первую цифру только после @P и разрешает ее, а затем добавляет все, что осталось в конце имени параметра.

По крайней мере, именно так плагин Sql Server Query Visualizer для Visual Studio показывает выполнение запроса.

Действительно странно.

Так что, если у кого-то есть совет, пожалуйста, поделитесь. Спасибо!

Обновление:
Я переписал исходный оператор linq, где теперь использую объединение вместо Contains, но все же хотел бы знать, есть ли способ обойти эту проблему.

Ответы [ 2 ]

1 голос
/ 13 сентября 2008

Чем больше я смотрю на это, и после запуска большего количества тестов, я думаю, что ошибка может быть в плагине Sql Server Query Visualizer для Visual Studio, а не в самом Linq to SQL. Так что ситуация не так плоха, как я думал - запрос вернет правильные результаты, но вы не можете доверять тому, что показывает визуализатор. Не отлично, но лучше, чем я думал.

0 голосов
/ 13 сентября 2008

Попробуйте на самом деле посмотреть на вывод из вашего datacontext, прежде чем выносить решение.

DataContext.Log () выдаст вам сгенерированный SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...