9

问题:我有一个搜索表单,允许用户搜索记录日期介于 2 个日期(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 秒附加到 <= 部分来填充另一个日期

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

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

3 回答 3

14

您应该使用以下TruncateTime功能:

EntityFunctions.TruncateTime(x.DateCreated) 
于 2013-07-11T11:27:59.283 回答
4

您应该在实体框架版本 6 中使用DbFunctions.TruncateTime ()。

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

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

谢谢@gor。

于 2015-06-04T03:54:28.647 回答
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();
于 2013-07-11T11:31:07.770 回答