c# - 如何在linq c#中跟踪移动到下一个子组记录
问题描述
Department Gender Name
---------- ------ ----
HR M Mike
HR F Johnna
HR M Erick
HR M Yvon
HR F Rachel
IT F Olga
IT M Saya
IT F Aldis
I am trying to group Employee by Department and Gender and assign
an incremental number to each name base of the department and the gender
Name Assign
Mike 1 -> M in HR
Erick 1 -> M in HR
Yvon 1 -> M in HR
Johnna 2 -> F in HR
Rachel 2 -> F in HR
Saya 1 -> M in IT
Olga 2 -> F in IT
Aldis 2 -> F in IT
问题是,当对两个字段的基础进行分组时,很难跟踪变化并知道子组何时在我们的案例部门和性别的父分组中发生变化
该数字是基于性别而不是部门名称的增量
解决方案
看起来男性总是被分配1
,而女性2
,在这种情况下你可以写:
foreach (var employee in employees) {
employee.AssignedNumber = (employee.Gender == 'M') ? 1 : 2;
}
但是,如果这并不总是正确的(例如,如果您的表格接受其他性别类型,或者如果某些部门没有任何男性),那么您可以编写:
var departments = employees.GroupBy(o => o.Department);
foreach (var department in departments) {
var genders = department.GroupBy(o => o.Gender);
var num = 1;
foreach (var gender in genders) {
foreach (var employee in gender) {
employee.AssignedNumber = num;
}
num++;
}
}
推荐阅读
- python - 处理来自 Youtube 的实时视频以将语音转换为文本
- javascript - 将外部 javascript 文件加载为节点进程
- signalr - Signalr 个人聊天
- linux - 如何将字符串中的所有 IP 地址放入 bash 数组中
- c# - MVC 中的 URL 编码令牌
- python - 用熊猫数据框索引中的条件替换字符串
- modal-dialog - 基础模式 closeOnClick closeOnEsc 不起作用
- vba - Outlook Inspector Activate 不带入前台
- ios - iPhone X - 底栏高度
- javascript - 在表格中选择更改选项时弹出模型