2010-07-22 153 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