我正在查询一组日期,并且在过去一周返回结果时没有取得成功。所以从(当前日期 - 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]))
问题是这两个查询都只返回完整的数据集。
有什么想法吗?
答案 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();
虽然您的测试数据未来未显示任何日期......