2016-07-27 15 views
1

我有兩個表TaskEmpTaskLambda表達式加入最後一次出現的右表

Table: Task Table: EmpTask 
__________  ________________________ 
ID | Title  ID | TaskID | XXXX 
__________  ________________________ 
1 | task1  1 | 1  | emptask1 
2 | task2  2 | 1  | emptask2 (this is last occurance of taskID 1) 
__________  3 | 2  | emptask3  
       4 | 2  | emptask4 (this is last occurance of taskID 2) 
       ________________________ 

結果預計:

________________________ 
ID | Title | XXXX 
________________________ 
1 | task1 | emptask2 
2 | task2 | emptask4 
________________________ 

我需要幫助寫在Lambda表達式查詢。

在此先感謝。

+0

我寫代碼高達這樣:var任務= db.Task.Join(TS.EmpTask,T => t.ID等=> et.TaskID,(T等)=>新的{T,等}) 。選擇(M =>新TaskObject { ID = MTID, 標題= mtTitle, XXXX = m.et.XXXX, });我應該在這裏添加什麼? – Ruby

+0

我不太清楚你的預期結果。你只是想要**最後**發生與'Task'相關的'EmpTask',還是應該將它與所有與'Task'相關的'EmpTask'列表? –

+1

定義「最後」。如果您的數據未訂購,則沒有第一個或最後一個概念。你是否在'ID'上排序數據?或在'XXXX'? –

回答

0

我好不容易纔得到答案。感謝大家幫助:)

var result = db.Task.Join(db.EmpTask, t => t.ID, et => et.TaskID, (t, et) => new { t, et }) 
        .Select(m => new 
        { 
         ID = m.t.ID, 
         Title = m.t.Title, 
         XXXX= m.et.XXXX 
        }).GroupBy(m => m.ID, (key, g) => g.OrderByDescending(m => m.EmpTaskId).FirstOrDefault()).ToList(); 
2

假設您想要max EmpTask

var result = (from t in db.Task 
     join r in db.EmpTask 
         .GroupBy(i => i.TaskID) 
         .Select(i => new { TaskID = i.Key, EmpTaskId = i.Max(t => t.ID)}) 
        on t.ID equals r.TaskID 
     join et in db.EmpTask on r.EmpTaskId equals et.ID 
     select new 
     { 
      ID = t.ID, 
      Title = t.Title, 
      XXXX = et.XXXX 
     }).ToList(); 

Lambda表達式

var result = db.Task.Join(
      db.EmpTask 
         .GroupBy(i => i.TaskID) 
         .Select(i => new { TaskID = i.Key, EmpTaskId = i.Max(t => t.ID)}) 
        , 
      t => t.ID, 
      r => r.TaskID, 
      (t, r) => new { Task = t, EmpTaskTmp = r} 
     ).Join(
      db.EmpTask, 
      et => et.ID 
      y => y.EmpTaskTmp.EmpTaskId, 
      (et, y) => new { Task = y.Task, MaxEmpTask = et} 
     ).Select(i => new 
     { 
      ID = i.Task.ID, 
      Title = i.Task.Title, 
      XXXX = i.MaxEmpTask.XXXX 
     });   
+0

你可以用Lambda表達式來編寫它嗎?謝謝 – Ruby

+0

@Ruby答案更新。 – NEER

相關問題