0

如何按时间跨度分组?我要做的是获取总分钟数,并执行从分钟函数获取时间跨度。

最终,我试图获得一个月内花费在特定帐户上的平均时间。我也在考虑尝试找出在特定帐户上花费的总时间。

我觉得我很接近了,但我在 select 语句中尝试的一切似乎都不起作用。

period = new DateTime(2013,1,1);
endPeriod = new DateTime(2013,1,1).AddMonths(1).AddDays(-1);
account.AccountNumber = 1455;

var q = from logs in db.logs
where logs.AccountNumber == account.AccountNumber
where logs.StartDateTime > period && logs.StartDateTime < endPeriod
let time = new TimeSpan(logs.ElapsedHours, logs.ElapsedMinutes, 0).TotalMinutes
group logs by time into g
select new {
AvgTime = g.Average(g.Key)

}

此查询当前返回 5 行。它应该只返回 1。我不确定我做错了什么。

有什么建议么?

麦克风

4

2 回答 2

1

这就是我最终的结果:

var result = (from logs in db.logs
         where logs.AccountNumber == 1450
         where logs.StartDateTime > new DateTime(2013,1,1) && logs.StartDateTime < new DateTime(2013,1,31)
         group logs by logs.AccountNumber into g
         select new {
             AvgTime = (g.Sum(h=>h.ElapsedHours) * 60) + g.Sum(h=>h.ElapsedMinutes) / g.Count(),
             TotalTime = (g.Sum(h=>h.ElapsedHours) * 60) + g.Sum(h=>h.ElapsedMinutes)
         }).ToList()
         .Select(x=> new {
            AvgTime = TimeSpan.FromMinutes(x.AvgTime),
            TotalTime = TimeSpan.FromMinutes(x.TotalTime)
         });
于 2013-02-13T01:25:10.253 回答
0

您的查询有点令人困惑-您按值(时间跨度)分组,但显然试图计算键值的平均值,而不是每个组中项目的平均值。如果确实如此,请尝试以下操作:

period = new DateTime(2013,1,1);
endPeriod = new DateTime(2013,1,1).AddMonths(1).AddDays(-1);
account.AccountNumber = 1455;

var q = from logs in db.logs
where logs.AccountNumber == account.AccountNumber
&& logs.StartDateTime > period && logs.StartDateTime < endPeriod
let time = new TimeSpan(logs.ElapsedHours, logs.ElapsedMinutes, 0).TotalMinutes
group logs by time into g
select new {
Time = g.Key
}

var averageTime = q.Average(i => i.Time);

g.Key只会为每个组提供一个值,这就是您看到 5 条记录的原因(我假设您的数据将产生 5 个组)。

于 2013-02-12T04:25:45.637 回答