LINQ to SQL join 3 Tabellen, und wählen Sie mehrere Spalten und auch mit Summe

Ich habe drei Tabellen Student, Stundenzettel und TimeRecord.

Talbe Spalten:

  • Student : StudentId, Vorname,
    Nachname
  • Stundenzettel: TimeSheetId,StudentId, IsActive
  • TimeRecord: TimeRecordId,TimeSheetId, BonusHour(Typ int), CreationDate

Tabelle Beziehung:

  • Schüler 1:N Stundenzettel (FK StudentId)
  • Arbeitszeittabelle 1:N TimeRecord (FK TimeSheetId)

Student sample-Daten:

StudentId, Vorname, Nachname

  • 10 , Makro , John
  • 11 , Hiro , Edge
  • 12 , Sarah , Zitrone

Arbeitszeittabellen-Daten Beispiel:

TimeSheetId, StudentId, IsActive

  • 187 , 10 , True
  • 196 , 11 , True
  • 195 , 12 , True
  • 199, 10 , False
  • 200 , 12 , False

TimeRecord Beispieldaten:

TimeRecordId, TimeSheetId, BonusHour, IsValid, CreationDate

  • 1 , 187 , 1 , True , 7/18/2010 10:23:25 Uhr
  • 2 , 196 , 2 , True , 7/19/2010 2:23:25 Uhr
  • 3 , 187 , 1 , False , 8/1/2010 2:5:25 UHR
  • 4 , 187 , 3 , True , 8/9/2010 12:23:13 Uhr
  • 5 , 196 , 0 , True , 7/20/2010 6:15:25 Uhr
  • 6 , 196 , 2 , True , 9/18/2010 2:23:25 Uhr
  • 7 , 195 , 3 , False , 8/18/2010 2:23:25 Uhr
  • 8 , 199, 4 , False , 7/18/2010 2:23:25 Uhr

Ich würde gerne insgesamt BonusHour der einzelnen Schüler, nur Aktiv, Stundenzettel Gültige BonousHour, die zählen. So, das Ergebnis wird so sein wie etwas im folgenden:

Für den Monat Juli und so weiter für jeden Monat

  • Hiro Edge hat 10hr für Juli 2010
  • Sarah Lem hat 8 STD für Juli 2010
  • Makro John hat 6hr für Juli 2010

Hier ist, was ich bisher ausprobiert:

 Dim query = From ts In db.TimeSheet _ 
                 Join tr In db.TimeRecord On tr.TimeSheetId Equals ts.TimeSheetId _ 
                 Group By ts.StudentId, tr.TimeSheetId Into TotalTime = Sum(BonusHour) 
                 Select StudentId, TimeSheetId, TotalTime 

Komme ich nicht an die Verknüpfung der drei Tabellen doch Recht. Ich kann nur join zwei Tabellen so weit. Ich muss join Student-Tabelle der Abfrage zu bekommen student name.

Vielen Dank.

Update Eine

Dim query = From st In db.Student Select New With { .stName = st.FirstName & " " & st.LastName, _ 
.BonusHours = (From ts In st.TimeSheets Join tr in db.TimeRecord On tr.TimeSheetId Equals ts.TimeSheetId _
                    Where ts.IsActive = True And tr.IsValid = True _
                    Group By key = New With {ts.TimeSheetId, .MonthYear = (tr.CreationDate.Value.Month & "/" & tr.CreationDate.Value.Year)} Into BonusHr = Sum(tr.BonusHour)})}

Nun, das problem ist, dass, wie kann ich die "MonthYear" aus "BournsHours". Weil ich es will :

  • Hiro Edge hat 10hr für Juli 2010
  • Sarah Lem hat 8 STD für Juli 2010
  • Makro John hat 6hr für Juli 2010
  • Hiro Edge hat 0hr für August 2010
  • Sarah Lem 3h für August 2010
  • Makro John hat 2hr für August 2010

und so weiter für jeden Monat.

InformationsquelleAutor Narazana | 2010-08-19

Schreibe einen Kommentar