我有三个表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
基础教程推荐
- DataGridView设置单元格的提示内容ToolTip 2023-05-23
- c# – 是否可以在PC的共享文件夹中使用SQLite数据库? 2023-11-23
- 基于WPF实现筛选下拉多选控件 2023-07-19
- C#使用DevExpress中的XtraCharts控件实现图表 2023-06-09
- Unity实现倒计时功能 2023-02-17
- unity 如何使用文件流读取streamingassets下的资源 2023-04-14
- C sharp (#) 数据类型获取方式 2023-07-05
- silverlight实现图片局部放大效果的方法 2022-11-02
- C#操作DataTable的实现步骤 2023-07-18
- c# 操作word写入特殊字符的实例 2023-03-29