如何在实体框架查询中将DateTime转换为TimeSpan

Jam*_*ing 8 c# linq sql-server entity-framework

我有Entity Framework 6的LINQ查询:

var timeCapturesQuery = Context.TimeCaptures
    .Where(t =>
        && t.StartDateTime.TimeOfDay < endTime
        && t.EndDateTime.TimeOfDay > startTime);
Run Code Online (Sandbox Code Playgroud)

EndTime和StartTime是类型的参数TimeSpan,StartDateTime和EndDateTime是表的列datetime.

不幸的是,我在运行时收到此错误:

LINQ to Entities不支持指定的类型成员'TimeOfDay'.仅支持初始值设定项,实体成员和实体导航属性.

如何在此LINQ查询中TimeSpan从DateTime(即SQL中的timefrom datetime)获取?

Sae*_*ini 5

看起来像是DbFunctions.CreateTime你在寻找:

当用作LINQ to Entities查询的一部分时,此方法调用规范的CreateTime EDM函数来创建新的TimeSpan对象.

因此,要在两次之间获得结果,您可以:

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);
Run Code Online (Sandbox Code Playgroud)