2016-02-08 47 views
0

我在添加datetime检查作为where子句的一部分时遇到linq子查询返回无效数据的问题。实体框架DateTIme查询

这是原始查询,它返回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 
      }; 

no date restriction results

于是我在开始日期进行比较,并将结果如下。该priorMonthStartOfDay是与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 
      }; 

start date restriction

为什么不表现为我所期望的日期比较值的日期时间?给定priorMonthStartOfDay的值,我期望结果集在最后两个查询中是相同的。我猜它与时间相等的比较有关,因为如果我从priorMonthStartOfDay中减去一秒,那么结果集再次匹配。

+0

什么'priorMonthStartOfDay'的最后一个查询的数据类型?它是一个“字符串”还是“DateTime”? – gldraphael

+0

@gldraphael DateTime;更新的问题 – drneel

+0

你可以说明你如何设置'priorMonthStartOfDay'?它可能不是你在调试器中看到的。 –

回答

0

唯一合乎逻辑的解释可能是您的priorMonthStartOfDay和/或startOfDayQueryParam变量包含调试器中未显示的时间部分。请注意,默认毫秒部分不显示,更不用说滴答声了。

是100%肯定你是比较反对日期,该标准的日期部分更改为

&& item.StartDate >= priorMonthStartOfDay.Date 
&& item.EndDate <= startOfDayQueryParam.Date 
+0

这是蜱虫。他们一个一个地离开了;我已经检查了毫秒,我甚至看过蜱,但显然不够接近。 – drneel