2013-09-30 250 views
7

的我有日期时间变量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."}

它说TimeOfDay不支持LINQ to Entities,如果是的话我该如何检查LINQ中datetime的时间部分。有没有其他方法可以做到这一点?请告诉我该怎么做。

谢谢。

+0

如果答案对您有帮助 - 请将其取出。如果这是解决方案 - upvote和更新 – MikroDel

+0

我发布了这个评论 - 原因至今 - 你有8个答案,他们接受0,但几乎都有回应。 – MikroDel

+0

@MikroDel我在根据你的回答尝试,我会为你的回复而高兴。 – link2jagann

回答

9

使用EntityFunctions.CreateTime方法:

流利的语法:

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

感谢您提供详细的解决方案。 – link2jagann

+4

请注意,对于实体框架6,这已更改为'DbFunctions.CreateTime' –

4

正如抬起头,如果哟你正在使用实体框架版本6.0.0.0,EntityFunctionsOUTDATED

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

因此,对于你的答案,使用EF6,它应该是这样的:

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

希望这有助于!