linq查询从组中选择前3并获得所选的平均值

时间:2015-07-28 15:03:36

标签: c# linq

我正在努力解决linq问题。

我想:

  1. 为每个schedule_Region_ids选择没有失败的箱子qc(QC = 1)
  2. 选择没有QC失败标记(1)的前3个箱柜(例如,如果没有QC标志= 1,箱柜3 4和5)
  3. 平均3个选定值以创建' BaselPeak'对于每个schedule_Region_id。
  4. 我尝试过以下代码:

    1.0000

    但是我最终得到前3个schedule_region_ids而不是每个schedule_region_id的前三个分档的平均值。如果我首先尝试GroupBy,那么我会得到自主类型错误。

    我有一个如下所示的数据集:

    var categories = drugonboard
        .Where(p => p.Field<int?>("QC") != 1)
        .OrderByDescending(x => x.Field<int>("bin")).Take(3)
        .GroupBy(t => new { ID = t.Field<int>("schedule_region_id")})
        .Select(g => new
        {
          schedule_region_id = g.Key.ID,
          BaselPeak = g.Average(p => p.Field<double>("AnalytePeak"))
        });
    

1 个答案:

答案 0 :(得分:0)

分组后和分拣子记录后需要3个。

var categories = drugonboard
  .Where(p => p.Field<int?>("QC") != 1)
  .GroupBy(t => new { ID = t.Field<int>("schedule_region_id")})
  .Select(g => new {
    schedule_region_id = g.Key.ID,
    BaselPeak = g.OrderByDescending(x => x.Field<int>("bin"))
      .Take(3)
      .Average(p => p.Field<double>("AnalytePeak"))
  });

这假定: 如果所有垃圾箱都是QC = 1,那么您根本不想要schedule_region_id父级,而前3位则表示最高3个垃圾箱号码。