将LINQ中的2个DateTime变量的正好日期部分与EF进行比较

时间:2013-07-11 11:15:07

标签: c# asp.net-mvc-3 entity-framework

问题: 我有一个搜索表单,允许用户搜索记录日期介于两个日期之间的东西(mm / dd / yyyy)

所有记录和对象都是Datetime类型,但我需要比较的是日期部分而不是时间部分。

根据MSDN,LINQ支持Date属性,但是这样写的语句不允许我将.Date附加到lambda部分:

错误:

The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.

示例:

x.DateCreated.Date

我确信这个问题出现了很多 - 我该如何解决?

我想我可以通过将23:59:59 = 86399秒添加到< = part

来填补另一个日期

这是声明。 (db是上下文对象)

 model.Contacts = 
                db.Prospects.Where(x => x.DateCreated >= df.Date && x.DateCreated <= dt.Date)
                    .OrderByDescending(x => x.DateCreated)
                    .Take(100)
                    .ToList();

3 个答案:

答案 0 :(得分:14)

您应该使用TruncateTime功能:

EntityFunctions.TruncateTime(x.DateCreated) 

答案 1 :(得分:4)

您应该在Entity Framework第6版中使用 DbFunctions.TruncateTime ()。

var fromDate = criteria.FromCreatedDate.Value.Date;
items.Where(i => DbFunctions.TruncateTime(i.CreatedOnDate) >=fromDate);

要获取日期大于 fromdate 的所有项目,而忽略 timepart

谢谢@gor。

答案 2 :(得分:1)

我使用以下解决方案

DateTime startDate = new DateTime(df.Year, df.Month, df.Day, 0,0,0);
DateTime endDate = new DateTime(df.Year, df.Month, df.Day, 23,59,59);

model.Contacts = 
                db.Prospects.Where(x => x.DateCreated >= startDate  && x.DateCreated <= endDate )
                    .OrderByDescending(x => x.DateCreated)
                    .Take(100)
                    .ToList();