Linq 将指标值转换为附加列并聚合数据

我正在尝试使用 Linq 进一步聚合我的数据。我有一个学生表设计不当,其中包含不必要的重复。我已经获取了数据,并且正在尝试将其聚合起来以便于阅读。现有数据结构如下:


| Course | Class  | Sex | Count |

---------------------------------

| Math   | Junior | M   | 20    |

| Math   | Junior | F   | 15    |

| Other  | Other  | M   | 10    |

| Other  | Other  | F   | 15    |

我正在尝试将上述内容转换为更简单的结构


| Course | Class  | Male| Female|

---------------------------------

| Math   | Junior | 20  | 15    |

| Other  | Other  | 10  | 15    |

我正在使用 for 循环来获取不同的课程并按性别获取记录并将它们合并到一个记录中,但这并不是很有效。现在有没有人通过Linq查询来实现这一点,我认为它可以由 Linq 处理。


繁华开满天机
浏览 141回答 1
1回答

一只斗牛犬

您可以在 Linq 中一次性完成此操作,方法是按课程和班级分组(我使用了ValueTuple,但匿名班级分组键也可以)。然后通过过滤和总结男性和女性获得总和:var results = courseCounts     .GroupBy(cc => (cc.Course, cc.Class))     .Select(grp => new              {                 Course = grp.Key.Course,                 Class = grp.Key.Class,                 Male = grp.Where(x => x.Sex == "M").Sum(x => x.Count),                 Female = grp.Where(x => x.Sex == "F").Sum(x => x.Count)             });(次要,但从较大数据集的性能角度来看,重复.Where(x => x.Sex == "x")两次效率有点低- 例如,我们可以先将数据键入分组 + 字典中)
打开App,查看更多内容
随时随地看视频慕课网APP