0

タイムスパンでグループ化するにはどうすればよいですか? 私がやろうとしているのは、合計分数を取得し、分数関数からタイムスパンを取得することです。

最終的に、特定のアカウントで 1 か月に費やされた平均時間を取得しようとしています。また、特定のアカウントに費やされた合計時間も見つけようとしています。

私は近づいているように感じますが、選択ステートメントで試したことはすべてうまくいかないようです。

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各グループに 1 つの値しか与えないため、5 つのレコードが表示されます (データから 5 つのグループが生成されると想定しています)。

于 2013-02-12T04:25:45.637 に答える