C# 实体框架日期时间查询

C# 实体框架日期时间查询,c#,sql-server,linq,datetime,linq-to-sql,C#,Sql Server,Linq,Datetime,Linq To Sql,在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

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;

然后我添加了开始日期比较,结果如下。
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
          };


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

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

要100%确定您正在与日期进行比较,请将标准的日期部分更改为

&& item.StartDate >= priorMonthStartOfDay.Date
&& item.EndDate <= startOfDayQueryParam.Date
&&item.StartDate>=前一个月的开始日期

&&item.EndDate上次查询中的
priorMonthStartOfDay
的数据类型是什么?它是
字符串
还是
日期时间
?@gldraphael-DateTime;更新的问题您可以演示如何设置
前一个月的开始日期
?它可能与您在调试器中看到的不完全相同。可能是
en.Amount
混淆了它,因为您没有定义
en
实际上是什么,或者您没有向我们显示完整的查询它是刻度。他们以1比1领先;我检查了毫秒数,甚至还看了滴答声,但显然不够近。
&& item.StartDate >= priorMonthStartOfDay.Date
&& item.EndDate <= startOfDayQueryParam.Date