LINQ To SQL - 获取与where子句匹配的最新记录

时间:2010-07-22 16:55:29

标签: linq-to-sql

给出类似下面的内容(仅作为示例一起抛出)

Employee ID | Time In       | Position | Shift Length  
1           | April 1 08:00 | Manager  | 8  
0           | April 1 08:00 | Maint    | 8  
1           | April 2 08:00 | Manager  | 8  
2           | April 1 08:00 | Clerk    | 4  
1           | April 3 08:00 | Manager  | 8  
0           | April 2 12:00 | Maint    | 1  
0           | April 3 12:00 | Maint    | 4  

如果给定特定日期,我需要能够检索该日期之前发生的每个员工ID的最新记录(仅基于时间)

因此,如果给定的日期是,例如

4月3日5:00

我希望看到以下行回来

Employee ID | Time In       | Position | Shift Length  
1           | April 2 08:00 | Manager  | 8  
2           | April 1 08:00 | Clerk    | 4  
0           | April 2 14:00 | Maint    | 1  

我需要为每场比赛返回整个记录。

我还需要确保在按员工ID过滤之前,根据给定日期评估记录。我不想获得每位员工的最新记录,然后根据日期对其进行测试。

感谢您的帮助。

1 个答案:

答案 0 :(得分:7)

听起来你想要这样的东西:

var query = from row in context.Whatever
            where row.TimeIn < specifiedDate
            group row by row.EmployeeID into g
            select g.OrderByDescending(r => r.TimeIn).First();

所以步骤是:

  • 过滤掉我们不想要的任何内容
  • 按员工分组
  • 在每个组中,按日期降序排列(即最新的第一个)并进行第一个条目

(另一种方法是使用g.OrderBy(r => r.TimeIn).Last() - 我不知道对生成的SQL会有什么不同。)