LINQ平均时间跨度?
我有一个数据库表,其中包含一个事件的开始时间和结束时间的条目。我想参加这些参赛作品并找出一个事件的平均长度。减法不成问题。但是,当我尝试获得平均值时,编译器会抱怨。LINQ平均时间跨度?
这是我目前的LINQ查询:
public TimeSpan? getAverageTime()
{
return (from EventTime in db.EventTimes
where EventTime.EventTimesID > 0
select (EventTime.TimeEnd - EventTime.TimeStart)).Average();
}
我也试过.SUM()和.Aggregate(),这样我可以有一些帮助,但没有被接受。
什么是实现我的目标的最佳方法?
看来,你必须使用LINQ2SQL语句SqlMethods.DateDiff(DATEDIFF函数如果SQL):
public int getAverageTime()
{
return (from EventTime in db.EventTimes
where EventTime.EventTimesID > 0
select (SqlMethods.DateDiffMinute(EventTime.TimeStart, EventTime.TimeEnd)).Average();
}
你是对的!这很好,唯一必要的改变就是TimeEnd最先。 – 2010-06-21 15:58:40
Average
不适用于TimeSpan
值,这是您减去两个DateTime
值时得到的结果。尝试平均(EventTime.TimeEnd - EventTime.TimeStart).TotalMilliseconds
,然后将其转换回TimeSpan。
非常好。这一个为我工作。有TimeSpan对象的列表出现,并且您的建议工作:TimeSpan avg = new TimeSpan(TimeSpan.TicksPerMillisecond *(long)System.Math.Round(ProcessElementTimes.Select(time => time.TotalMilliseconds).Average(), 0)); – 2012-06-18 12:57:30
@David:你可以简化为TimeSpan.FromTicks(ProcessElementTimes.Average(x => x.Ticks);'此外,你真的需要四舍五入吗?如果你这样做,四舍五入的结果,而不是每个值将更多精确 – BatteryBackupUnit 2013-08-22 12:51:18
var avg=(from t in array select (t.endtime.Ticks-t-starttime.Ticks)).Average();
Console.Write(new DateTime((long)avg).TimeOfDay);
究竟如何编译器抱怨吗? – 2010-06-21 15:44:26
你得到的编译器错误是什么? – 2010-06-21 15:47:39
System.LINQ.IQueryable不包含'Average'的定义 –
2010-06-21 15:51:14