У меня есть три таблицы Student, TimeSheet и TimeRecord.
Столбики Талбе:
Студент: StudentId, AssignedId, FirstName,
LastName
Расписание: TimeSheetId, StudentId, IsArchive, IsComplete
- TimeRecord: TimeRecordId, TimeSheetId, BonusHour (тип int), CreationDate
Таблица отношений:
- Ученик 1: N TimeSheet (FK StudentId)
- Расписание 1: N TimeRecord (FK TimeSheetId)
Данные об ученике:
StudentId, AssignedId, FirstName, LastName
- 100, 741, Макро, Джон
- 101, 742, Hiro, Edge
- 102, 743, Сара, Лимон
и сын на ..
Данные образца расписания:
TimeSheetId, StudentId, IsArchive, IsComplete
- 187, 100, True, False
- 196, 101, True, False
- 195, 102, True, False
- 199, 100, правда, правда
- 200, 102, правда, правда
Пример данных TimeRecord:
TimeRecordId, TimeSheetId, BonusHour, CreationDate
- 1, 187, 1, 18.07.2010, 22:23:25
2, 196, 2, 19.07.2010 14:23:25
3, 187, 1, 01.08.2010 2: 5: 25 AM
4, 187, 3, 9 августа 2010 г., 12:23:13
5, 196, 0, 20.07.2010 18:15:25
6, 196, 2, 18.09.2010 14:23:25
7, 195, 3, 18.08.2010 14:23:25
8, 199, 4, 18.07.2010 14:23:25
На самом деле, я пытаюсь получить ежемесячный бонусный час каждого студента.
Dim query = From s In db.Students _
Let pair = (From ts In db.TimeSheets _
Join tr In db.TimeRecords On tr.TimeSheetId Equals ts.TimeSheetId _
Where ts.IsArchive = False And ts.IsCompleted = False And tr.TimeOut IsNot Nothing _
Group By key = New With {ts.StudentId, .MonthYear = (tr.CreationDate.Value.Month & "/" & tr.CreationDate.Value.Year)} Into TotalHour = Sum(tr.BonusHour)) _
From part In pair _
Select New With {.stId = s.AssignedId, .MonthYear = part.key.MonthYear, .TotalHour = part.TotalHour}
Этот запрос проходит по элементу «pair» и присваивает его каждому ученику.
AssignedId , MonthYear, TotalHour
- 741, 6/2010 , 5
- 742, 6/2010 , 5
- 743, 6/2010 , 5
- 744, 6/2010 , 5
- 745, 6/2010 , 5
- 741, 7/2010 , 8
- 742, 7/2010 , 8
- 743, 7/2010 , 8
- 744, 7/2010 , 8
- 745, 7/2010 , 8
и т. Д. До последнего результата элемента "pair".
Итак, правильный результат должен быть таким:
- 741, 6/2010 , 5
- 742, 6/2010 , 8
- 743, 6/2010 , 9
- 744, 6/2010 , 10
- 745, 6/2010 , 15
Или вот так:
AssignedId, месяц / год, например:
AssignedId, 7/2010, 8/2010
- 741 , 8hr, 2hr
- 742, 3hr ,4hr
- 743, 3hr, 1hr
- and son on..
Можете ли вы помочь мне исправить мой запрос выше? Любые предложения в C # или VB.NET приветствуются.
Спасибо.