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

基于Group By与升序的LINQ查询:关联两表获取待处理考勤记录

解决方法:关联两张表的LINQ查询

我来帮你搞定这个需求!要实现筛选出CheckType为"Pending"且和员工表匹配的考勤日志,还得按时间升序排列,咱们可以用LINQ的两种写法来实现,你可以根据自己的习惯选一种:

1. LINQ 查询语法(类SQL风格)

这种写法可读性强,逻辑和SQL非常接近,适合刚接触LINQ的朋友:

var pendingAttendanceLogs = from log in attendancelogs
                           join emp in employees on log.Registeration_Id equals emp.Enroll_Id
                           where log.CheckType == "Pending"
                           orderby log.DateTime ascending
                           select log;

逻辑拆解:

  • join子句:将考勤日志表和员工表通过Registeration_Id(考勤表字段)与Enroll_Id(员工表字段)建立关联
  • where条件:仅保留CheckType为"Pending"的考勤记录
  • orderby:按DateTime字段升序排列(ascending可以省略,LINQ默认排序规则就是升序)
  • select log:最终返回符合条件的考勤日志完整记录

2. LINQ 方法语法(链式调用风格)

如果更喜欢简洁的链式调用写法,可以用这种方式:

var pendingAttendanceLogs = attendancelogs
    .Where(log => log.CheckType == "Pending")
    .Join(employees,
          log => log.Registeration_Id, // 指定考勤表的关联字段
          emp => emp.Enroll_Id,        // 指定员工表的关联字段
          (log, emp) => log)           // 关联后仅返回考勤日志对象
    .OrderBy(log => log.DateTime);

逻辑拆解:

  • 先用Where筛选出状态为"Pending"的初始考勤日志
  • 再通过Join方法关联员工表,匹配指定的关联字段
  • 最后用OrderBy按DateTime完成升序排序

如果之后需要同时获取关联的员工信息,只需要把返回逻辑改成匿名对象即可,比如将select log改成select new { AttendanceLog = log, Employee = emp },或者把(log, emp) => log改成(log, emp) => new { AttendanceLog = log, Employee = emp }。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:37:31