日期查询未返回正确的结果

时间:2013-12-24 11:05:36

标签: c# sql entity-framework

我正在查询一组日期,并且在过去一周返回结果时没有取得成功。所以从(当前日期 - 7天)到现在。

这些是日期集:

2013-12-19 17:30:23.153
2013-12-13 00:00:00.000
2013-12-19 00:00:00.000
2013-11-19 00:00:00.000
2013-12-19 00:00:00.000
2013-12-19 00:00:00.000
2013-12-19 00:00:00.000
2013-12-15 00:00:00.000
2013-12-20 12:42:59.223
2013-12-20 12:45:17.713
2013-12-20 13:10:02.797

(总共11个。上个月1个。当前10个月。过去一周有8个。)

C#:

query.Where(c => c.CreatedOn > System.Data.Entity.DbFunctions.AddDays(c.CreatedOn, -7)).Count();

转换后的SQL:

SELECT 
[Extent1].[EmailLinkClickId] AS [EmailLinkClickId], 
[Extent1].[EmailLinkId] AS [EmailLinkId], 
[Extent1].[MailingListRecipientId] AS [MailingListRecipientId], 
[Extent1].[CampaignId] AS [CampaignId], 
[Extent1].[CreatedOn] AS [CreatedOn], 
[Extent1].[IPAddress] AS [IPAddress]
FROM [Marketing].[dbo].[EmailLinkClick] AS [Extent1]
WHERE  CAST( [Extent1].[CreatedOn] AS datetime2) > (DATEADD (day, -7, [Extent1].[CreatedOn]))

问题是这两个查询都只返回完整的数据集。

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

您相对于数据库中的日期进行了计算。你需要它相对于当前日期:

var startDate = DateTime.Now.AddDays(-7);
query.Where(c => c.CreatedOn > startDate).Count();

独立于时间:

var startDate = DateTime.Now.Date.AddDays(-7);

评论:我正在使用startDate因为我认为没有必要让数据库进行计算,尽管使用DbFunctions没有任何问题。

答案 1 :(得分:0)

问题是您要将日期与日期7进行比较而不是现在的7:

query.Where(c => c.CreatedOn > System.Data.Entity.DbFunctions.AddDays(c.CreatedOn, -7)).Count();

试试这个:

query.Where(c => c.CreatedOn > System.Data.Entity.DbFunctions.AddDays(DateTime.Now, -7)).Count();

答案 2 :(得分:0)

您的查询正在查找超过七天前的日期。您还需要限制,以便仅返回日期也小于今天的日期。

var startDate = DateTime.Now.AddDays(-7);
query.Where(c => c.CreatedOn > startDate && c.CreatedOn < DateTime.Now).Count();

虽然您的测试数据未来未显示任何日期......