LINQ分组处理:解决数据录入错误,按ItemNo分组取首个ItemName
问题:分组时处理ItemNo相同但ItemName不一致的情况
现有如下数据,需要按ItemNo分组,但因录入错误,相同ItemNo可能对应不同ItemName(比如Item#1同时有Name_11和Name_12),导致原本应该合并的分组被拆分。需求是:相同ItemNo的组统一取该组的第一个ItemName,同时保留原有的统计逻辑。
| ItemNo | ItemName | Other Data |
|---|---|---|
| Item#1 | Name_11 | Other |
| Item#1 | Name_12 | Other |
| Item#2 | Name_21 | Other |
原代码会同时按ItemNo和ItemName分组,无法满足需求,修改后的代码如下:
var _qry = _models .GroupBy(x => x.ItemNo) // 仅按ItemNo分组,确保相同ItemNo的所有数据在同一组 .Select(y => new { ItemNo = y.Key, ItemName = y.First().ItemName, // 取该组第一个元素的ItemName作为统一名称 Other1 = y.Count(x => x.ID != 0), Other2 = y.Count(x => x.ID != 0 && (x.Completed == false || x.Completed == null)) }) .ToList();
关键修改说明:
- 把
GroupBy的分组键从new {x.ItemNo, x.ItemName}改为仅x.ItemNo,这样同一个ItemNo的所有记录会被归为一组,避免因ItemName不一致拆分分组。 - 在
Select中,通过y.First().ItemName获取该组第一条记录的ItemName,作为整个组的统一名称,解决录入错误导致的名称不一致问题。 - 统计
Other1和Other2的逻辑保持不变,依然基于整个分组的所有数据计算。
内容的提问来源于stack exchange,提问作者Hussein
相关产品推荐
相关产品推荐

