簡體   English   中英

linq按時間跨度分組

[英]linq group by timespan

如何按時間范圍分組? 我想做的是獲取總分鍾數,並從分鍾功能執行獲取時間跨度。

最終,我試圖獲得一個月在特定帳戶上花費的平均時間。 我也在尋找一個特定帳戶所花費的總時間。

我覺得我已經接近了,但是我在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。我不確定自己在做什么錯。

有什么建議么?

麥克風

您的查詢有點混亂-您正在按值(時間跨度)分組,但顯然要嘗試計算鍵值的平均值,而不是每個組中項目的平均值。 如果確實如此,請嘗試以下操作:

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個組)。

我最終得到的是:

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)
         });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM