【问题标题】:Using Linq to group hourly and get an hourly average使用 Linq 每小时分组并获得每小时平均值
【发布时间】:2015-11-07 18:19:25
【问题描述】:

我似乎无法弄清楚如何做到这一点。 我有一个具有DateTime 属性和int 的对象

我想每小时对DateTime 进行分组,然后将TimeTaken 属性平均每小时。

型号

public class ChartModel
{
    public DateTime Date { get; set; }
    public int TimeTaken { get; set; }
}

控制器

public ActionResult PopulateResponseTimeChart()
{
    // selectedItem is a type of IEnumerable<ChartModel>
    var average = selectedItem.GroupBy(x => x.Date.Date).Select(x => new { Date = x.Key, Average = x.Average(a => a.TimeTaken) });
    var data = average.Select(x => x.Average.ToString(CultureInfo.CurrentUICulture)).ToArray();
    var time = average.Select(x => x.Date).ToArray();

     // Other stuff
 }

上面的这个似乎不起作用。 average 仅包含 1 个结果,而我希望它是每小时一次。 这背后的原因是我想在 JS 库 Highcharts 中使用它

【问题讨论】:

  • 你希望它如何每小时?您的代码中没有任何指定每小时分组或任何类似内容的内容。您按日期分组,然后为每个日期创建一条记录,其中包含当天所有记录的日期和平均时间。
  • 正确,我不知道该怎么做,这是我的问题。我将编辑我的 OP 以确保清楚我在问什么。
  • 那么只是按日期小时分组的问题吗?有多种方法可以实现这一点,包括...GroupBy(x =&gt; new { x.Date.Date, x.Date.Hour })
  • 我还需要TimeTaken 是每个分组小时的平均值吗?
  • 那没关系,因为您是在组中平均

标签: c# linq highcharts


【解决方案1】:
selectedItems.GroupBy(x => x.Date.Hour)
             .Select(g => new { Hour = g.Key, AverageTimeTaken = g.Average(x => x.TimeTaken) });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多