使用 Entity Framework 4 和 Linq 查询比较 DateTime 属性中的日期的简单方法

Posted

技术标签:

【中文标题】使用 Entity Framework 4 和 Linq 查询比较 DateTime 属性中的日期的简单方法【英文标题】:Simple way to compare Dates in DateTime attribute using Entity Framework 4 and Linq queries 【发布时间】:2011-11-11 08:18:29 【问题描述】:

我正在尝试运行以下代码,但由于没有将我期望的实体交给我,比较失败了。

它将06/09/2011 0:00:0006/09/2011 12:25:00 进行比较,后者是我的数据库记录值。所以这就是比较失败并且我没有得到我需要的记录的原因。

我只是想比较日期是否匹配,我不在乎时间。

DateTime today = DateTime.Now.Date;
var newAuctionsResults = repo.FindAllAuctions()
                        .Where(a => a.IsActive == true || a.StartTime.Value == today)
                        .ToList();

如何只比较日期?

如果在 .StartTime.Value 部分使用 .Date 属性,我会得到一个异常:

LINQ to Entities 不支持指定的类型成员“日期”。 只有初始化器、实体成员和实体导航属性 支持。

【问题讨论】:

也许这个问题会有所帮助?林克 |如何在 Linq 查询中执行日期比较? ***.com/questions/1088212/… 【参考方案1】:

您可以使用单个成员:

var newAuctionsResults = repo.FindAllAuctions()
                        .Where(a => a.IsActive == true 
                                    || (a.StartTime.Value.Year == todayYear
                                        && a.StartTime.Value.Month == todayMonth
                                        && a.StartTime.Value.Day == todayDay))
                        .ToList();

...或使用the other methods/properties supported in L2E中的任何一个。

【讨论】:

它被用于相等运算符。如果我需要检查大于和小于运算符怎么办。【参考方案2】:

你也可以在System.Data.Objects命名空间下使用EntityFunctions.TruncateTime()

例如

db.Orders.Where(i => EntityFunctions.TruncateTime(i.OrderFinishDate) == EntityFunctions.TruncateTime(dtBillDate) && i.Status == "B")

像魅力一样工作。

【讨论】:

那你怎么写单元测试呢? EntityFunctions 现已过时,请改用 DbFunctions!【参考方案3】:

试试

DateTime todayStart = DateTime.Now.Date;
DateTime todayEnd = DateTime.Now;
var newAuctionsResults = repo.FindAllAuctions()
                        .Where(a => a.IsActive == true || (a.StartTime.Value >= todayStart && a.StartTime.Value <= todayEnd))
                        .ToList();

【讨论】:

【参考方案4】:

你可以使用转换

DateTime.ToShortDateString()

http://msdn.microsoft.com/en-us/library/system.datetime.toshortdatestring.aspx

这会忽略时间。

然后比较两个字符串。

if(string1 == string2)

 //Do Something

【讨论】:

Not supported in L2E,恐怕。

以上是关于使用 Entity Framework 4 和 Linq 查询比较 DateTime 属性中的日期的简单方法的主要内容,如果未能解决你的问题,请参考以下文章

Entity Framework 4.3 - TPH 映射和迁移错误

Entity Framework 4 / POCO - 从哪里开始? [关闭]

Entity Framework 4.1 和 NHibernate 的获取策略封装

如何在 Entity Framework 4.1 中使用更新 SPROC

Entity Framework 4.4,重新加载子集合对象

SQL Compact 4.0 和 Entity Framework 4.0:图像/Blob 限制?