c# – LINQ to SQL连接3个表并选择多个列并使用Sum

我有三个表Student,TimeSheet和TimeRecord.塔尔贝专栏:学生:StudentId,FirstName,姓 TimeSheet:TimeSheetId,StudentId,IsActive TimeRecord:TimeRecordId,TimeSheetId,BonusHour(type int),CreationDate表...

我有三个表Student,TimeSheet和TimeRecord.

塔尔贝专栏:

>学生:StudentId,FirstName,

> TimeSheet:TimeSheetId,StudentId,IsActive
> TimeRecord:TimeRecordId,TimeSheetId,BonusHour(type int),CreationDate

表关系:

>学生1:N时间表(FK StudentId)
>时间表1:N TimeRecord(FK TimeSheetId)

学生样本数据:

StudentId,FirstName,LastName

> 10,宏,约翰
> 11,Hiro,Edge
> 12,莎拉,柠檬

TimeSheet示例数据:

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有有效的BonousHour才算数.所以,结果将类似于以下内容:

对于任何一个月的七月等等

> Hiro Edge 2010年7月有10小时
> Sarah Lem在2010年7月有8小时
>宏约翰在2010年7月有6小时

Here’s what I tried so far:

 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表连接到查询以获取学生姓名.

非常感谢.

Update One

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小时
>宏约翰在2010年7月有6小时
> Hiro Edge 2010年8月的0小时
> Sarah Lem 2010年8月有3小时
>宏约翰在2010年8月有2小时

等等任何一个月.

解决方法:

这是工作查询:

Dim query = From ts In db.TimeSheets_
            Join tr In db.TimeRecords On tr.TimeSheetId Equals ts.TimeSheetId _
     Where ts.IsActive = True And tr.IsValid = True _
     Group By key = New With {ts.Student, .MonthYear = (tr.TimeOut.Value.Month & "/" & tr.TimeOut.Value.Year)} Into TotalHour = Sum(BonusHour) _
                     Select key.Student.StudentId, key.Student.AssignedId, key.MonthYear, TotalHour

本文标题为:c# – LINQ to SQL连接3个表并选择多个列并使用Sum

基础教程推荐