【问题标题】:How can I do a group by and then an average using LINQ [duplicate]如何使用 LINQ 进行分组然后平均 [重复]
【发布时间】:2020-03-13 11:36:58
【问题描述】:

我有这门课:

public class LogViews2
{
    public string DateYYMMDD { get; set; }
    public double CPUSpeed { get; set; }
    public double DBSpeed { get; set; }
}

我正在填充的数据:

var ViewsList2 = ViewsList
    .Select(x => new LogViews2
    {
        DateYYMMDD = x.DateYYMMDD,
        DBSpeed = x.DBSpeed,
        CPUSpeed = x.CPUSpeed
    })
    .ToList();

我想按 DateYYMMDD 分组,而不是仅使用选择,然后为每个获取 DBSpeed 和 CPUSpeed 的平均值,并按日期顺序对其进行排序。

谁能给我建议,不知道我该怎么做?

【问题讨论】:

标签: c# linq


【解决方案1】:

这应该可行:

var ViewsList2 = ViewsList
    .GroupBy(x => x.DateYYMMDD)
    .OrderBy(g => g.Key)
    .Select(g => new LogViews2
    {
        DateYYMMDD = g.Key,
        DBSpeed = g.Average(gx => gx.DBSpeed),
        CPUSpeed = g.Average(gx => gx.CPUSpeed)
    })
    .ToList();

根据@Pavel Anikhouski 编辑:简化Average 调用。

并添加OrderBy

【讨论】:

  • g.Average(gx => gx.DBSpeed) 看起来更自然
  • .OrderBy(item => item.DateYYMMDD) : "...按日期排序..."
  • @DmitryBychenko 为什么要将() 添加到g => new LogViews2
  • @Sajid:我们创建一个LogViews2类的新实例:g => new LogViews2(),然后初始化它:{DateYYMMDD = ..., }
  • @DmitryBychenko 是的,我明白这一点,但我不知道这里的new LogViews2{....}new LogViews2(){....} 有什么区别?都调用默认构造函数!
【解决方案2】:

想一想,可以试试:

ViewsList.GroupBy(logView => logView.DateYYMMDD)
         .Select(logView => new {
             AverageCPU = logView.Average(log => log.CPUSpeed),
             AverageDBSpeed = logView.Average(log => log.DBSpeed)
         }
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    相关资源
    最近更新 更多