Запрос LINQ-to-SQL в Visual Studio создает запрос SQL с ошибками. В LINQPad тот же самый запрос LINQ, использующий ту же базу данных (или DataContext), выполняется просто отлично.
LINQ Query
var accesDomaines = from t in db.Access
where t.IdUser == access.IdUtilisateur
where t.IdDomain != null
where t.IdRole == access.IdRole
where t.IdPlace == access.IdPlace
select t;
Вот небольшая часть сгенерированного SQL, где возникает ошибка:
WHERE (...) AND ([t3].[IdRole] = ) AND (...)
После равенства в пункте where буквально ничего нет! В SQL-запросе LINQPad мы видим хорошее предложение where:
WHERE (...) AND ([t3].[IdRole] IS NULL) AND (...)
Когда я сравниваю два сгенерированных SQL-запроса из VS и LINQPad, строка за строкой, это одно и то же. За исключением того, что LINQPad использует params, а также отсутствующую правую часть равенства в выражении where в Visual Studio, как показано ранее.
Примечание 1
В запросе LINQ я попытался использовать этот синтаксис в предложениях where:
where t.IdRole.Equals(acces.IdRole.Value)
Но также дает плохой результат. Я даже пробовал что-то подобное до запроса LINQ:
if (!acces.IdRole.HasValue) { acces.IdRole = null; }
Примечание 2
Свойства - обнуляемые целые числа. Я хочу нулевой в запросе, если свойство равно нулю. Очевидно, я хочу значение свойства, если есть значение.
Примечание 3
Я попробовал предложение, сделанное в этом вопросе: Linq, где column == (нулевая ссылка) не совпадает с column == null
... безуспешно.
Какое-нибудь объяснение двух похожих запросов LINQ, но создание хорошего и плохого запроса SQL? Любое предложение, чтобы решить эту проблему?
Спасибо!