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