如何在 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++;
}
}

最新更新