2016-07-27 4 views
1

Ich habe zwei Tabellen Task und EmpTask.Lambda-Ausdruck Beitreten mit dem letzten Auftreten der rechten Tabelle

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) 
       ________________________ 

Ergebnis erwartet:

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

ich Hilfe Abfrage in Lambda Ausdruck schreiben wollen.

Vielen Dank im Voraus.

+0

I-Code bis zu diesem geschrieben haben: var Aufgaben = db.Task.Join (TS.EmpTask, t => t.ID et => et.TaskID, (t, et) => new {t, et}) .Select (m => new TaskObject { ID = MTID, Title = mtTitle, XXXX = m.et.XXXX, }); Was soll ich hier hinzufügen? – Ruby

+0

Ich bin mir nicht sicher über dein erwartetes Ergebnis. Willst du nur das ** letzte ** Vorkommen einer'EmpTask' in Bezug auf eine 'Aufgabe', oder sollte es stattdessen eine Liste von' EmpTask' sein, die mit einer 'Aufgabe' verbunden ist? –

+1

Definieren Sie "zuletzt". Wenn Ihre Daten nicht bestellt werden, gibt es keine erste oder letzte Möglichkeit. Ordnen Sie Ihre Daten auf "ID"? oder auf 'XXXX'? –

Antwort

0

ich es geschafft, die Antwort zu bekommen. Vielen Dank für alle geholfen :)

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

Angenommen, Sie möchten 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 Expression

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

Könnten Sie es in Lambda Ausdruck schreiben. Danke – Ruby

+0

@Ruby Antwort aktualisiert. – NEER

Verwandte Themen