У меня есть проблемы с LINQ (с использованием EF - 4.3.1.0) с помощью следующего:Linq, используя обнуляемое DATETIME поля
DateTime? dtcollected = DateTime.TryParse(dateCollected, out dateVal) ? dateVal : (DateTime?)null;
DateTime? dtanalyzed = DateTime.TryParse(dateanalyzed, out dateVal) ? dateVal : (DateTime?)null;
var doesexist = (from pw in dbContext.WtTbl
where pw.CompanyId == 13
&& pw.DateCollected == dtcollected
&& pw.DateAnalyzed == dtanalyzed
select pw).Any();
Обратите внимание, что dateCollected пришел в виде строки, так что я должен был преобразовать его в обнуляемом DateTime. То же самое касается даты датирования.
На что я нахожусь, это то, что у меня есть компания с номером 13. Нулевое значение dtcollected. И значение для dtanalyzed уже в таблице, поэтому я ожидаю, что hasexist вернет true, но возвращает false.
Если я закомментировать
var doesexist = (from pw in dbContext.WtTbl
where pw.CompanyId == 13
// && pw.DateCollected == dtcollected
&& pw.DateAnalyzed == dtanalyzed
select pw).Any();
или поставить:
var doesexist = (from pw in dbContext.WtTbl
where pw.CompanyId == 13
&& pw.DateCollected == null
&& pw.DateAnalyzed == dtanalyzed
select pw).Any();
Тогда я получаю истинное. Почему он не может понять значение null dtcollected? Я делаю что-то неправильно.
LINQ to what? Это похоже на ошибку EF, которая была исправлена в 4.5 – SLaks
Да, pwDateCollected имеет значение null в таблице, а dtcollected имеет значение null в C# для этой конкретной записи. –
Yep, EF не может обрабатывать запрос, где == , где оба значения NULL. Это должно быть переведено в IS NULL, но оно соответствует = NULL, который не дает правильного результата. –
Maarten