问题: 我有一个搜索表单,允许用户搜索记录日期介于两个日期之间的东西(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();
答案 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();