У меня возникла проблема с подзапросом linq возвращать недопустимые данные при добавлении в проверки даты и времени как часть предложения where
.Entity Framework DateTIme Query
Это исходный запрос, и он возвращает 0; потому что набор результатов null
var subquery =
(from item in g
from e in item.Entry
where e.Type == 1
&& e.EntryType == 2
&& item.StartDate >= priorMonthStartOfDay
&& item.EndDate <= startOfDayQueryParam
select e.Amount).Sum() ?? 0M;
Я изменил запрос, чтобы увидеть то, что было данных; вот этот запрос и результирующий набор данных.
var subquery =
(from item in g
from e in item.Entry
where e.Type == 1
&& e.EntryType == 2
select new
{
Amount = e.Amount,
SD = item.StartDate,
ED = item.EndDate,
QD = priorMonthStartOfDay
};
Затем я добавил в сравнение даты начала и результаты приведены ниже. priorMonthStartOfDay
является DateTime со значением 12/1/2015 12:00:00 AM
var subquery =
(from item in g
from e in item.Entry
where e.Type == 1
&& e.EntryType == 2
&& item.StartDate >= priorMonthStartOfDay
select new
{
Amount = e.Amount,
SD = item.StartDate,
ED = item.EndDate,
QD = priorMonthStartOfDay
};
Почему сравнение дата не ведет себя, как я ожидал? Учитывая значение priorMonthStartOfDay
, я ожидаю, что результирующий набор будет таким же для последних двух запросов. Я предполагаю, что это имеет какое-то отношение к времени, равному сравнению, потому что если я вычитаю секунду из priorMonthStartOfDay
, тогда набор результатов снова совпадет.
то, что тип данных 'priorMonthStartOfDay' в последнем запросе? Является ли это 'string' или' DateTime'? – gldraphael
@gldraphael DateTime; обновленный вопрос – drneel
Можете ли вы показать, как вы устанавливаете 'priorMonthStartOfDay'? Возможно, это не совсем то, что вы видите в отладчике. –