我的EF6代码优先模型中有以下属性:
public DateTime StartTime { get; set; }
public TimeSpan Duration { get; set; }
EF将其转换为SQL Server列
StartTime DATETIME
Duration TIME(7)
到目前为止效果很好。
现在我想在特定的DateTime值之后加载所有EndDate = StartDate + Duration
的条目。首先,我试着这样做:
db.Entries
.Where(x => x.StartTime + x.Duration >= begin)
.ToList();
这不起作用,EF不知道如何翻译DateTime + TimeSpan
加法运算符。
所以我把它改成了这个:
db.Entries
.Where(x => DbFunctions.AddMilliseconds(x.StartTime, (int)x.Duration.TotalMilliseconds)
>= begin)
.ToList();
在这里,它理论上知道如何执行DateTime + TimeSpan
添加,但它不知道TotalMilliseconds
函数:
System.NotSupportedException:附加信息:指定的类型成员' TotalMilliseconds' LINQ to Entities不支持。仅支持初始化程序,实体成员和实体导航属性。
任何提示?
答案 0 :(得分:1)
您可以将毫秒组件保存为long或int,而不是将Duration保存为TimeSpane。在这种情况下,您不必将其转换为毫秒