使用LINQ查询去重条目,保留唯一Company+Item组合及任意对应Key
解决方案
不需要提前获取Company和Item的去重列表再循环查询,直接使用LINQ的GroupBy方法即可实现需求,核心思路是将Company和Item的组合作为分组键,每个分组取第一条数据即可:
方法链写法(常用)
var distinctResult = sourceData // 按Company + Item组合作为分组键 .GroupBy(x => new { x.Company, x.Item }) // 每个分组取第一条数据,自然包含全部三列,Key取该分组第一条的对应值即可 .Select(g => g.First()) .ToList();
查询表达式写法
var distinctResult = from data in sourceData group data by new { data.Company, data.Item } into dataGroup select dataGroup.First();
补充说明
- C#会自动对比匿名类型的所有属性值是否相等,刚好匹配你需要的「Company和Item组合唯一」的要求
- 如果是EF/EF Core等对接数据库的场景,该写法会自动转换为高效的SQL分组去重语句,执行效率远高于手动循环查询单条数据的实现
内容的提问来源于stack exchange,提问作者Scott D
相关产品推荐
相关产品推荐

