2016-07-27 10 views
1

私は2つのテーブルTaskEmpTaskを持っています。ラムダ式右テーブルの最後の出現と結合する

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 
________________________ 

私は、ラムダ式でクエリを記述するのに役立ちたいです。

ありがとうございます。

+0

助けました)=>新しい{T、ら}) .Select(M =>新しいTaskObject {ID = mtID、 タイトル= mtTitle、 XXXX = m.et.XXXX、 })。私はここに何を追加すべきですか? – Ruby

+0

私はあなたの期待した結果についてはあまりよく分かりません。あなたは単に 'タスク'に関連した 'エンプティタスク'の**最後の**発生を望んでいますか、それとも 'タスク'に関連した全ての 'EmpTask'のリストでなければなりませんか? –

+1

"last"を定義します。あなたのデータが発注されていない場合、最初または最後の概念はありません。 IDでデータをソートしていますか?または 'XXXX'で? –

答えて

0

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(); 

ラムダ式は、私は答えを得ることができました。 VARタスク= db.Task.Join(TS.EmpTask、T => t.ID、ら=> et.TaskID、(T、ら:みんなのおかげで、私はこの件までコードを書かれている:)

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 = 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

ラムダ式で書くことができますか?ありがとう – Ruby

+0

@Ruby回答が更新されました。 – NEER

関連する問題