对于以下情况,我如何使用 LINQ 来获取每小时和每天的平均值:
public class Sales
{
public Sales()
{
}
public string Name { get; set;}
public DateTime SaleDate { get; set;}
public int Price { get; set;}
}
ICollection<Sales> myCollection = new List<Sales>();
我知道我可以从 myCollection 中得到这样的平均值:
double average = myCollection.Average(a => a.Price);
我需要的是获取每天的平均值:
date average
24.09.2013 1243
25.09.2013 1278
26.09.2013 2587
然后是特定日期的每小时平均值:
hours average
00:00 - 01:00 125
01:00 - 02:00 127
02:00 - 03:00 158
等等……
最佳答案
您可以通过以下方式按日期计算平均值:
var results = myCollection.GroupBy(i => i.SaleDate.Date)
.Select(g => new {Date = g.Key, Average = g.Average(a => a.Price) });
foreach(var result in results)
{
Console.WriteLine("{0} {1}", result.Date, result.Average);
}
为给定日期按小时计算平均值:
var results = myCollection.Where(i => i.SaleDate.Date == theDate)
.GroupBy(i => i.SaleDate.Hour)
.Select(g => new {Hour = g.Key, Average = g.Average(a => a.Price) });
foreach(var result in results)
{
var hourStart = TimeSpan.FromHours(result.Hour);
var hourEnd = TimeSpan.FromHours(result.Hour + 1);
Console.WriteLine("{0:hh\:mm} - {1:hh\:mm} {1}", hourStart, hourEnd, result.Average);
}
关于c# - ICollection<T> 使用 LINQ 计算每小时平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19059528/