添加DateTime / TimeSpan的DbFunctions(SQL Server中的datetime / time(7))

时间:2015-07-17 15:51:10

标签: c# sql-server entity-framework entity-framework-6

我的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不支持。仅支持初始化程序,实体成员和实体导航属性。

任何提示?

1 个答案:

答案 0 :(得分:1)

您可以将毫秒组件保存为long或int,而不是将Duration保存为TimeSpane。在这种情况下,您不必将其转换为毫秒