使用Linq从查询结果中筛选分组后OCCURANCE最高的记录
修改方案
你可以在现有查询的基础上,按CODE1和SAMPLE两个字段分组,每个分组内仅保留OCCURANCE值最高的记录即可,完整代码如下:
var Output = (from s in dt2.AsEnumerable() from c in dt1.AsEnumerable() where Regex.IsMatch(s.Field<string>("CODE1"), c.Field<string>("CODE1")) && Regex.IsMatch(s.Field<string>("SAMPLE"), c.Field<string>("CODE2")) select new { OCCURANCE = c.Field<int>("OCCURANCE"), CODE1 = s.Field<string>("CODE1"), SAMPLE = s.Field<string>("SAMPLE"), }) // 追加分组取最大值逻辑 .GroupBy(x => new { x.CODE1, x.SAMPLE }) .Select(g => g.OrderByDescending(x => x.OCCURANCE).First());
逻辑说明
GroupBy语句以CODE1和SAMPLE组合作为分组键,把重复的同编码同样本的记录归到同一个分组里- 每个分组内按
OCCURANCE倒序排序,取第一条就是该分组下出现次数最高的记录,即可过滤掉低频次的重复数据。
如果存在同一个CODE1+SAMPLE组合有多个相同最高OCCURANCE的记录需要全部保留,可以把最后一行的Select逻辑替换为:
.SelectMany(g => g.Where(x => x.OCCURANCE == g.Max(y => y.OCCURANCE)))
内容的提问来源于stack exchange,提问作者aditya mukherjee
相关产品推荐
相关产品推荐

