实体框架DateTIme查询

时间:2016-02-08 19:33:35

标签: c# sql-server linq datetime linq-to-sql

在将datetime检查作为where子句的一部分添加时,我遇到linq子查询的问题会返回无效数据。

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

start date restriction

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

1 个答案:

答案 0 :(得分:0)

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

要100%确定您要与日期进行比较,请将条件的日期部分更改为

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