计算实体框架中两个日期之间的平均时间跨度

时间:2015-03-05 02:20:08

标签: entity-framework

我有一个包含两列的数据库表:StartDateTimeFinishDateTime。两者都是可以为空的日期时间列。

我想计算每行两个字段之间的Average时间。即我记录的事件的平均持续时间。

我得到一个" DbArithmeticExpression参数必须有一个数字公共类型。"

示例EF代码,简化了演示。

from p in new DbContext()
where p.user_id = 123
&& p.StartDateTime != null
&& p.FinishDateTime != null
select new {p.StartDateTime, p.FinishDateTime})
.Average(p=> (p.FinishDateTime.Value - p.StartDateTime.Value).Ticks)

我喜欢上面的例子,因为SQL使这变得轻而易举。

1 个答案:

答案 0 :(得分:2)

它取决于您的数据提供商,它可能支持DbFunctions,您可以执行以下操作:

(from p in new DbContext()
where p.user_id = 123
&& p.StartDateTime != null
&& p.FinishDateTime != null
select new {p.StartDateTime, p.FinishDateTime})
.Average(x=> DbFunctions.DiffMilliseconds(p.FinishDateTime,p.StartDateTime))

如果没有,我认为你必须在选择之后将linq转到对象:

(from p in new DbContext()
where p.user_id = 123
&& p.StartDateTime != null
&& p.FinishDateTime != null
select new {p.StartDateTime, p.FinishDateTime})
.ToArray()
.Average(x=> (p.FinishDateTime -p.StartDateTime).Ticks)