2010-07-22 117 views
3

鉴于类似如下(只是放在一起作为一个例子)LINQ到SQL - 得到匹配where子句

 
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进行过滤。我不想为每个员工获取最新的记录,然后根据日期对这些记录进行测试。

感谢您的帮助。

回答

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有什么区别。)

+0

g.OrderBy(R => r.TimeIn)。去年()不出现去工作,但你的主要答案是。 – BenMaddox 2011-01-06 14:40:55