LINQ to Entities 不支持 TimeOfDay 属性,因此您可以尝试改用 SqlFunctions.DatePart 方法。
您可能还应该将 TimeSpan 转换为 DateTimes 。
我认为这应该可行(假设 TimeSpan 是从一天开始的):
var now = DateTime.Now;
var today = new DateTime(now.Year, now.Month, now.Day);
var endDateTime = today + endTime;
var startDateTime = today + startTime
var timeCapturesQuery = Context.TimeCaptures.Where(t =>
SqlFunctions.DatePart("timeofday", t.StartDateTime) < SqlFunctions.DatePart("timeofday", endDateTime)
&& SqlFunctions.DatePart("timeofday", t.EndDateTime) > SqlFunctions.DatePart("timeofday", startDateTime));
编辑
如 cmets 中所述,DatePart 方法不支持特定属性 TimeOfTheDay。
也许EntityFunctions.DiffNanoseconds 方法会起作用:
var now = DateTime.Now;
var today = new DateTime(now.Year, now.Month, now.Day);
var endDateTime = today + endTime;
var startDateTime = today + startTime
var timeCapturesQuery = Context.TimeCaptures.Where(t =>
EntityFunctions.DiffNanoseconds(t.StartDateTime, endDateTime).Value < 0
&& EntityFunctions.DiffNanoseconds(t.EndDateTime, startDateTime).Value > 0);
编辑2
另一个更简单且我认为可行的选项就是比较日期时间。
我们已经将 TimeSpan 转换为 DateTimes,我们可以使用 LINQ to Entities 创建一个简单的条件,它应该可以工作,因为我们没有使用任何 DateTimes 属性。
var now = DateTime.Now;
var today = new DateTime(now.Year, now.Month, now.Day);
var endDateTime = today + endTime;
var startDateTime = today + startTime
var timeCapturesQuery = Context.TimeCaptures.Where(t => t.StartDateTime < endDateTime && t.EndDateTime > startDateTime);