如何在实体框架查询中将DateTime转换为TimeSpan [英] How to convert DateTime to TimeSpan in Entity Framework query
问题描述
我在实体框架6中有此LINQ查询:
I have this LINQ query with Entity Framework 6:
var timeCapturesQuery = Context.TimeCaptures
.Where(t =>
&& t.StartDateTime.TimeOfDay < endTime
&& t.EndDateTime.TimeOfDay > startTime);
EndTime和StartTime是类型TimeSpan
的参数,StartDateTime和EndDateTime是datetime
表中的列.
EndTime and StartTime are parmeters of type TimeSpan
, StartDateTime and EndDateTime are columns on the table of datetime
.
不幸的是,我在运行该错误时遇到了这个错误:
Unfortunately I get this error when it is run:
LINQ to Entities不支持指定的类型成员'TimeOfDay'.仅支持初始化程序,实体成员和实体导航属性.
The specified type member 'TimeOfDay' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
如何在此LINQ查询中从DateTime(即SQL中的datetime
中的time
)中获取TimeSpan
?
How can I get a TimeSpan
from a DateTime (i.e. the time
from datetime
in SQL) in this LINQ query?
推荐答案
Looks like DbFunctions.CreateTime
is what you're looking for:
当用作LINQ to Entities查询的一部分时,此方法将调用 规范的CreateTime EDM函数来创建新的TimeSpan对象.
When used as part of a LINQ to Entities query, this method invokes the canonical CreateTime EDM function to create a new TimeSpan object.
因此,要在两次之间获得结果,您可以:
So to get results between two times, you can:
var timeCapturesQuery = Context.TimeCaptures.Where(t =>
DbFunctions.CreateTime(t.StartDateTime.Hour, t.StartDateTime.Minute, t.StartDateTime.Second) < endTime &&
DbFunctions.CreateTime(t.EndDateTime.Hour, t.EndDateTime.Minute, t.EndDateTime.Second) > startTime);
这篇关于如何在实体框架查询中将DateTime转换为TimeSpan的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!