c# - ICollection<T> 使用 LINQ 计算每小时平均值

标签 c# linq

对于以下情况,我如何使用 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/

相关文章:

c# - 如何从抽象父类(super class)中引用子类的字段?

c# - 使用 JavaWS 服务时可以查看 .NET 生成的 XML 吗?

c# - ViewModel 自动具有与通用模型相同的属性

C# 在 Word 文档中查找和替换文本的替代方法

c# - 如何检查数组中的所有值是否相等

c# - EF Core 的 DefaultIfEmpty 异常 "bug or limitation"

linq - Sitecore ContentSearch LINQ 不支持的表达式节点类型 : Parameter

c# - 如何使用抽象类创建通用列表?

c# - LINQ 过滤器列表并排除 MAX 值

c# - linq查询一对一