7

我有 datetime 变量officeStartTime,它将 datetime 值保存为

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

我有CHECKINOUT包含userid,checktime和其他属性的模块。

现在我想要的是获取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."}.

它说TimeOfDayLINQ to Entities 不支持,如果是这样,我如何检查 LINQ 中日期时间的时间部分。有没有其他方法可以做到这一点?请建议我该怎么做。

谢谢你。

4

3 回答 3

11

利用

CreateTime(hour, minute, second)

日期和时间规范函数

于 2013-09-30T11:28:51.590 回答
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)
于 2013-09-30T11:36:09.993 回答
5

请注意,如果您使用的是 Entity Framework 版本 6.0.0.0,EntityFunctions则为OUTDATED

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

因此,对于您的答案,使用 EF6,它看起来像这样:

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

希望这可以帮助!

于 2016-09-02T13:24:52.940 回答