使用LINQ to SQL在查询中包含条件检查

时间:2010-08-20 07:07:55

标签: c# vb.net linq linq-to-sql

欢迎使用C#或VB.NET建议。

表关系:

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

    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 _
                Group By key = New With {ts.TimeSheetId, ts.StudentId} Into TotalHour = Sum(tr.BonusHour)) _
                From part In pair _
                Where part.key.StudentId = s.StudentId _
                Select New With {.StudentId = s.StudentId, .AssignedId = s.AssignedId,.TotalTime = part.TotalHour}
    

以下是查询结果:

  • 734 - 159:9小时35毫米28秒
  • 2655 - 160:93小时33毫米50秒
  • 1566 - 161:37 hrs 23 mm 53 sec
  • 3114 - 162:25小时0毫米21秒

通缉查询结果:

  • 733 - 158:0 hr 0mm 0 sec
  • 734 - 159:9小时35毫米28秒
  • 736 - 169:0小时0毫米0秒
  • 2655 - 160:93小时33毫米50秒
  • 1566 - 161:37 hrs 23 mm 53 sec
  • 3114 - 162:25小时0毫米21秒
  • 2165 - 189:0 hr 0 mm 21 sec

有些TimeSheet没有TimeRecord,我也需要选择它。如何选择所有这些以进行如上所述的选择?我在考虑如何包含一些条件 检查查询以查看此TimeSheet是否没有TimeRecord,然后不需要Sum(tr.BonusHour)只将TotalHour分配给零。我不知道这是正确的方法。

欢迎任何消化。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用Sum(C#)执行此类操作:

Sum(tr.BonusHour ?? 0)

相同
Sum(tr.BonusHour != null ? tr.BonusHour : 0)

我不确定您BonusHour的类型是什么,因此您将使用此类型的零通信对象而不是示例中的0