2016-11-21 85 views
1

我从数据库中使用LINQ查询了IQueryable结果,现在我必须根据字段date_sent过滤所有行。应该从date_sent到当前日期计算天数。这总数没有。应该检索0到30天范围内的天数。我该怎么做。我有下面的代码,但它不工作。没有错误但没有正确过滤。基于总天数检索日期范围之间的行

query = query.Where(x => x.DATE_SENT != null); 

query = query.Where(x => (int)(EntityFunctions.DiffDays(currentDate, (DateTime)x.DATE_SENT)) >= 0 && 
         (int)(EntityFunctions.DiffDays(currentDate, (DateTime)x.DATE_SENT)) <= 30);               

关于如何处理它的任何指导将是伟大的。

+0

它如何不正确过滤。你得到了什么。你期望什么? – hometoast

+0

我期待6行,但只有一行被返回。我已确认date_sent在0-30天之间,但不会显示。 –

+0

您需要获取最近30天的行吗? –

回答

1

您可以使用此查询得到它。

var dtDiff = DateTime.Now.AddDays(-30); 
query = query.Where(z=> z.DATE_SENT >= dtDiff); 

31-60天

var dtDiff31 =DateTime.Now.AddDays(-31); 
    var dtDiff60 =DateTime.Now.AddDays(-60); 
    query = query.Where(z=> z.DATE_SENT >= dtDiff60 && z.DATE_SENT <= dtDiff31); 
+0

我试过你的代码。它向我扔错误“LINQ to Entities不能识别方法'System.DateTime AddDays(Double)'方法,并且此方法不能转换为商店表达式” –

+0

@BVidhya现在应该是工作。 –

+0

感谢您的工作0-30天,我需要下一个范围31-60天。你如何设定范围? –

0

看来你只是想通过日期范围过滤:

DateTime filterDate = currentDate.AddDays(-30); 

query = query.Where(x => x.DATE_SENT >= filterDate); 

如果您currentDate可以改变你添加第二个条件:

query = query.Where(x => x.DATE_SENT >= filterDate && x.DATE_SENT < currentDate);