Запрос LINQ-to-SQL в Visual Studio генерирует SQL-запрос с ошибками. В LINQPad тот же запрос LINQ, использующий одну и ту же базу данных (или DataContext), работает нормально.
Запрос LINQ
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 (...)
После равных в том месте, там буквально ничего! В SQL-запросе LINQPad мы видим предложение where:
WHERE (...) AND ([t3].[IdRole] IS NULL) AND (...)
Когда я сравниваю два сгенерированных SQL-запроса от VS и LINQPad, по очереди, это одно и то же. Кроме того, LINQPad использует параметры, а также отсутствующую правую часть равенства в where, где указано Visual Studio, как показано выше.
Примечание 1
В запросе LINQ я попытался использовать этот синтаксис в тех случаях, когда:
where t.IdRole.Equals(acces.IdRole.Value)
Но также порождает плохой результат. Я даже пробовал что-то вроде этого перед запросом LINQ:
if (!acces.IdRole.HasValue) { acces.IdRole = null; }
Примечание 2
Свойства представляют собой целые числа с нулевым значением. Я хочу, чтобы null в запросе, если свойство равно null. Очевидно, что я хочу значение свойства, если есть значение.
Примечание 3
Я пробовал предложение, сделанное в этом вопросе: Linq, где column == (нулевая ссылка) не совпадает с столбцом == null
... без успеха.
Любое объяснение двух похожих запросов LINQ, но генерирование хорошего и плохого SQL-запроса? Любое предложение решить эту проблему?
Спасибо!