【发布时间】:2010-08-19 15:08:53
【问题描述】:
我有三个表 Student、TimeSheet 和 TimeRecord。
Talbe 列:
学生:StudentId,名字, 姓氏
TimeSheet:TimeSheetId、StudentId、IsActive
- TimeRecord: TimeRecordId,TimeSheetId, BonusHour(type int), CreationDate
表关系:
- 学生 1:N 时间表 (FK StudentId)
- TimeSheet 1:N TimeRecord (FK TimeSheetId)
学生样本数据:
学生 ID、名字、姓氏
- 10,宏,约翰
- 11, 希罗, 边缘
- 12,莎拉,柠檬
时间表样本数据:
TimeSheetId、StudentId、IsActive
- 187、10、真
- 196、11、真
- 195、12、真
- 199, 10 , 错误
- 200 , 12 , 假
TimeRecord 样本数据:
TimeRecordId、TimeSheetId、BonusHour、IsValid、CreationDate
- 1 , 187 , 1 , True , 7/18/2010 10:23:25 PM
2 , 196 , 2 , True , 7/19/2010 2:23:25 PM
3 , 187 , 1 , False , 8/1/2010 2:5:25 AM
4 , 187 , 3 , True , 8/9/2010 12:23:13 PM
5 , 196 , 0 , True , 7/20/2010 6:15:25 PM
6 , 196 , 2 , True , 9/18/2010 2:23:25 PM
7 , 195 , 3 , False , 8/18/2010 2:23:25 PM
8 , 199, 4 , False , 2010 年 7 月 18 日下午 2:23:25
我想得到每个学生的总 BonusHour,只有 Active TimeSheet 有 Valid BonousHour 计数。因此,结果将类似于以下内容:
7 月份,以此类推任何月份
- Hiro Edge 2010 年 7 月有 10 小时
- Sarah Lem 2010 年 7 月有 8 小时的工作时间
- Macro John 在 2010 年 7 月有 6 小时的工作时间
这是我目前尝试过的:
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
我还不能正确连接三个表。到目前为止,我只能加入两张桌子。我需要将 Student 表加入查询以获取学生姓名。
非常感谢。
更新一个
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)})}
现在,问题是如何从“BournsHours”中获取“MonthYear”。因为我想要这样:
- Hiro Edge 2010 年 7 月有 10 小时
- Sarah Lem 2010 年 7 月有 8 小时的工作时间
Macro John 在 2010 年 7 月有 6 小时的工作时间
Hiro Edge 的 2010 年 8 月为 0 小时
- Sarah Lem 2010 年 8 月有 3 小时的工作时间
- Macro John 在 2010 年 8 月有 2 小时的时间
任何月份的等等。
【问题讨论】:
标签: c# .net vb.net linq linq-to-sql