使用 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:00
与06/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