“TimeOfDay”属性在LINQ to Entities中不受支持,因此您可以尝试使用
SqlFunctions.DatePart方法代替。
您还应该将TimeSpans转换为DateTimes。
我认为这应该可以工作(假设TimeSpans是从一天的开始计算的):
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));
编辑
如评论中所述,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);
另一个更简单的选项是比较日期时间。我们已经将时间跨度转换为日期时间,并且可以使用LINQ to Entities创建一个简单的条件,应该能够工作,因为我们没有使用任何日期时间属性。
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);