获取日期时间

时间:2013-09-30 11:26:46

标签: linq entity-framework entity-framework-4.1

我有日期时间变量officeStartTime,它将日期时间值保持为

officeStartTime = {9/24/2013 10:00:00 AM}

我的模块CHECKINOUT包含useridchecktime和其他属性。

现在我想要的是获取CHECKINOUT条目的列表,其中检查时间的时间部分大于officeStartTime的时间部分。

我试试:

var checklist= con.CHECKINOUTs.Where(x => x.CHECKTIME.TimeOfDay > officeStartTime.TimeOfDay);

checklist包含以下错误:

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

它表示LINQ to Entities不支持TimeOfDay,如果是这样,我如何检查LINQ中datetime的时间部分。有没有其他方法可以做到这一点?请建议我做什么。

谢谢。

3 个答案:

答案 0 :(得分:11)

使用

CreateTime(hour, minute, second)

来自Date and Time Canonical Functions

答案 1 :(得分:9)

使用EntityFunctions.CreateTime方法:

var checklist= from c in con.CHECKINOUTs
               let time = EntityFunctions.CreateTime(c.CHECKTIME.Hour,
                                                     c.CHECKTIME.Minute,
                                                     c.CHECKTIME.Second)
               where time > officeStartTime.TimeOfDay
               select c;

流利语法:

con.CHECKINOUTs.Where(c => EntityFunctions.CreateTime(c.CHECKTIME.Hour, c.CHECKTIME.Minute, c.CHECKTIME.Second) > officeStartTime.TimeOfDay)

答案 2 :(得分:4)

正如提醒一样,如果您使用的是Entity Framework V6.0.0.0,则EntityFunctions OUTDATED

可以在DbFunctions下找到相同的功能。

所以对于你的答案,使用EF6,它看起来像这样:

con.CHECKINOUTs.Where(c => DbFunctions.CreateTime(c.CHECKTIME.Hour, c.CHECKTIME.Minute, c.CHECKTIME.Second) > officeStartTime.TimeOfDay)

希望这有帮助!