【问题标题】:how to track move to the next child group record in linq c#如何在linq c#中跟踪移动到下一个子组记录
【发布时间】:2019-12-20 01:04:00
【问题描述】:
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

问题在于,当对两个字段的基础进行分组时,很难 跟踪更改并了解父分组内子组何时更改 在我们的案例部门和性别中

数字是基于性别而不是部门名称的增量

【问题讨论】:

  • 不清楚这些数字与什么有关。从您的示例看来,所有M 都具有1F 具有2。这也是在数据库中还是在内存中的集合中?如果是数据库,您使用的是哪个 ORM?
  • 行为是所有记录都应该先按部门分组,然后按性别分组。部门 HR 中的所有元素,即 M 被分配,部门 HR 中的第二组将被分配 2,第三组将被分配 3,依此类推。下一个部门将是相同的。那么如何在 foreach 循环执行期间分配那些计算出来的数字。我正在使用 linq 在内存中的集合

标签: c# asp.net linq


【解决方案1】:

看起来男性总是被分配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++;
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多