C# linq查询以从组中选择前3名,并获得所选组的平均值
我正在努力处理linq查询 我想:C# linq查询以从组中选择前3名,并获得所选组的平均值,c#,linq,C#,Linq,我正在努力处理linq查询 我想: 为每个计划\区域\ ID选择未通过qc(qc=1)的箱子 选择没有QC不合格标记(1)的前3个箱子(例如,如果没有QC标记=1,则选择箱子3、4和5) 求3个选定值的平均值,为每个计划区域id创建“BaselPeak” 我尝试了以下代码: var categories = drugonboard .Where(p => p.Field<int?>("QC") != 1) .OrderByDescending(x => x
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
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"))
});
var类别=风险
.其中(p=>p.字段(“QC”)!=1)
.GroupBy(t=>new{ID=t.Field(“schedule\u region\u ID”)})
.选择(g=>new{
附表_区域_id=g.Key.id,
BaselPeak=g.OrderByDescending(x=>x.Field(“bin”))
.采取(3)
.平均值(p=>p.字段(“分析峰”))
});
这假定:
如果所有仓位都是QC=1,则您根本不希望计划\u区域\u id为父项,前3个仓位是指最高的3个仓位编号。在分组和对子记录排序后,您需要取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"))
});
var类别=风险
.其中(p=>p.字段(“QC”)!=1)
.GroupBy(t=>new{ID=t.Field(“schedule\u region\u ID”)})
.选择(g=>new{
附表_区域_id=g.Key.id,
BaselPeak=g.OrderByDescending(x=>x.Field(“bin”))
.采取(3)
.平均值(p=>p.字段(“分析峰”))
});
这假定:
如果所有的箱子都是QC=1,那么您根本不想要明细表\u区域\u id父项,前3位是指最高的3个箱子编号。您的问题令人困惑,因为您说取前3个箱子(3,4,5),但在您的数据集中,id 1的箱子3的QC=1。当你说前3个箱子时,你是指分析峰值最高的箱子,还是说箱子编号最高的箱子?“id”是否与“计划区域id”相同?显示所需的输出将有所帮助。当所有箱子都是QC=1时,您期望得到什么?您的问题令人困惑,因为您说取前3个箱子(3,4,5),但在您的数据集中,id为1的箱子3的QC=1。当你说前3个箱子时,你是指分析峰值最高的箱子,还是说箱子编号最高的箱子?“id”是否与“计划区域id”相同?显示所需的输出将有所帮助。当所有箱子的质量控制=1时,您期望得到什么?