LINQ查询从一个组中选择前3名,并获得所选结果的平均值

cl25kdpy  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(148)

我想:
1.为每个schedule_Region_ids选择未通过qc(QC=1)的箱
1.选择没有QC失败标记(1)的前3个箱(例如,如果没有QC标记=1,则为箱3、4和5)
1.取3个选定值的平均值,为每个schedule_Region_id创建“BaselPeak”。
我尝试了以下代码:

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"))
    });

字符串
然而,我最终得到的是前3个schedule_region_id,而不是每个schedule_region_id的前3个bin的平均值。如果我先尝试GroupBy,那么我会得到匿名类型错误。
我有一个数据集,看起来像这样:

id | bin | AnalytePeak | QC
 1 |  1  |         620 | 
 1 |  2  |        1020 |
 1 |  3  |         681 |  1
 1 |  4  |        1190 |   
 1 |  5  |        1200 |    
 ---------------------------
 2 |  1  |        1020 |
 2 |  2  |        1076 |
 2 |  3  |        1190 |
 2 |  4  |        1200 |
 2 |  5  |         358 |  1
 ---------------------------
 3 |  1  |        1020 |
 3 |  2  |        1076 |
 3 |  3  |        1190 |
 3 |  4  |        1200 |
 3 |  5  |        1358 |

jm2pwxwz

jm2pwxwz1#

在分组和排序子记录后,您需要取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"))
  });

字符串
这是假设:如果所有的bin都是QC=1,那么你根本不需要schedule_region_id父节点,而top 3是指最高的3个bin编号。

相关问题