2013-12-24 2 views
0

Я запрашиваю набор дат и не получаю успеха с возвращением результатов с прошлой недели. Итак, с (текущая дата - 7 дней).Запрос даты не возвращает правильные результаты

Эти наборы дат: (.... 11 в общей сложности 1 предыдущий месяц 10 текущий месяц 8 за неделю)

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 

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

Спасибо всем. Иногда просто замечает лишний глаз! – JakkyD

ответ

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(); 
0

Выполнены расчеты относительно даты в базе данных. Вам это нужно по отношению к текущей дате:

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

быть независимым от времени:

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

Комментарий: Я использую startDate, потому что я думаю, что нет никакой необходимости дать базу данных сделать расчет, хотя нет ничего плохого в использовании DbFunctions.

0

Ваш запрос ищет даты, которые больше, чем семь дней назад. Вам также необходимо будет ограничить, чтобы он возвращал даты также меньше сегодняшней даты.

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

хотя ваши данные теста не показывают никаких дат в будущем ...

Смежные вопросы