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

使用LINQ移除列表重复项并保留重复数据中日期最新的行

实现方法

核心逻辑是按员工唯一标识分组后,每组取薪资日期最新的单条记录,具体LINQ写法如下:

方式1:直接在原查询链中追加逻辑(推荐,性能更高)

直接在原有查询后追加分组、取最新值的逻辑,不需要先加载全量数据到内存:

List<EmployeeSalary> lstEmployeeSalary = 
    new EmployeeSalaryFactory().GetRelatedObjects(inValue, ddlPayDate, payRollType, payrollSearch)
                              .Select(m => (EmployeeSalary)m)
                              // 按员工唯一标识分组,示例用员工Id,可按需替换为EmpCode或组合字段
                              .GroupBy(emp => emp.Id)
                              // 每组内按薪资日期降序排序,取第一条即最新记录
                              .Select(group => group.OrderByDescending(emp => emp.DateOfSalary).First())
                              .ToList();

方式2:对已获取的原始列表做去重处理

如果已经拿到了原始的lstEmployeeSalary列表,可直接对列表做处理:

lstEmployeeSalary = lstEmployeeSalary
    .GroupBy(emp => emp.Id)
    .Select(group => group.OrderByDescending(emp => emp.DateOfSalary).First())
    .ToList();

注意事项

  • 如果员工唯一标识是工号EmpCode,把GroupBy(emp => emp.Id)替换为GroupBy(emp => emp.EmpCode)即可
  • 如果需要用多个字段组合判断为同一员工,可使用匿名类分组:GroupBy(emp => new { emp.Id, emp.EmpCode })
  • 请确保DateOfSalary为DateTime类型,避免字符串日期排序异常;如果是字符串存储的日期,需要先转成DateTime再参与排序
  • 如果GetRelatedObjects返回的是IQueryable类型,方式1的逻辑会自动翻译成SQL在数据库侧执行,性能远高于全量拉取到内存后处理

内容的提问来源于stack exchange,提问作者coder rock

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:36:02