You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用LINQ筛选Type为A的员工并按Category分组映射到NewModel?

如何用LINQ筛选指定类型员工、按Category分组并转换为NewModel集合?

嘿,这需求不难,咱们用LINQ几步就能搞定!先理清楚核心逻辑:我们要先把所有部门里Type为"A"的员工捞出来,然后按部门的Category把这些员工归到一起,最后转成NewModel类型的集合。

直接上完整代码示例(假设你已经有了List<Dept>类型的数据源depts):

// 假设这是你的部门数据源
List<Dept> depts = GetYourDeptData();

var newModelList = depts
    // 第一步:把每个部门里符合条件的员工拆出来,同时带上所属部门的Category
    .SelectMany(dept => dept.Employees
        .Where(emp => emp.Type == "A") // 筛选Type为"A"的员工
        .Select(emp => new { dept.Category, emp.Name }))
    // 第二步:按Category分组,把同类别下的员工归到一组
    .GroupBy(item => item.Category)
    // 第三步:把每组数据转换成NewModel对象
    .Select(group => new NewModel
    {
        Category = group.Key, // 分组的key就是Category
        EmpNames = group.Select(item => item.Name).ToList() // 收集组内所有员工姓名
    })
    .ToList();

我给你拆解下每一步的作用:

  • SelectMany:这个方法是关键,它能把每个部门里的符合条件的员工“平铺”成单独的条目,同时带上部门的Category,这样我们就得到了一堆{ Category, Name }的小对象,方便后续分组。
  • Where筛选:这一步很直白,就是把Type不是"A"的员工排除掉。
  • GroupBy:把所有条目按Category归类,同一个Category的员工会被分到同一个组里——哪怕他们来自不同的部门,这正好符合需求里“按Category分组”的要求。
  • Select转NewModel:最后把每个分组转换成NewModel,分组的Key就是Category,再把组里的所有员工姓名收集成列表赋值给EmpNames。

额外注意事项

  • 如果你的数据源里可能存在空值(比如Dept为null,或者某个部门的Employees是null),记得加上空值保护,比如把dept.Employees改成dept?.Employees,避免空引用异常。
  • 如果想过滤掉没有符合条件员工的Category(也就是EmpNames为空的NewModel),可以在最后加个过滤:
    .Where(model => model.EmpNames.Any())
    

内容的提问来源于stack exchange,提问作者Alan B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:34:53