2010-08-20 62 views
2

我有以下查詢,我也想總結NULL值。一些TimeSheet不記錄在TimeRecord中,有些tr.TimeIn和tr.TimeOut是NULL。LINQ to SQL sum null值

查詢選擇具有reords在TimeRecord僅考勤卡]。我怎樣才能讓它選擇一切,並總結NULL值。所以,NULL的SUM將只是零。

表關係:

  • 學生1:N的TimeSheet(FK StudentId)
  • 的TimeSheet 1:N TimeRecord(FK TimeSheetId)

TimeIn和超時是DateTime類型和可空。

查詢1: Monthy報告:

Dim query = 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.Student, .MonthYear = (tr.TimeOut.Value.Month & "/" & tr.TimeOut.Value.Year)} Into TotalHour = Sum(DateDiffSecond(tr.TimeIn, tr.TimeOut)) _ 
       Select key.Student.StudentId, key.Student.AssignedId, key.MonthYear, TotalHour 

查詢2:總TimeRecord與主動的TimeSheet學生:

Dim query = 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 ts.StudentId, tr.TimeSheetId Into TotalTime = Sum(DateDiffSecond(tr.TimeIn, tr.TimeOut)) _ 
      Select StudentId, TimeSheetId, TotalTime 

這裏的查詢2的結果:

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

查詢2的求購結果:

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

同樣爲查詢1,但它使每月報告。

+0

只是提示下一次您發佈的問題 - 問題是關於總結空記錄,所以剝去一切不是**嚴格**與它有關。解決核心問題最好不要處理你的案件幾年,幾個月,學生等。簡單地說 - 尊重別人的時間。 – greenoldman 2010-08-20 05:33:06

回答

1

我很抱歉,因爲我翻譯查詢到C#調整它之前,我真的不知道VB語法不夠好,把它翻譯回來,但我希望你能。我嘗試以下查詢,它確實你問什麼:

var query = from st in Students 
    select new 
    { 
     st.StudentId, 
     st.AssignedId, 
     TotalHour = (
      from ts in TimeSheets 
      where ts.StudentId == st.StudentId 
      join tr in TimeRecords on ts.TimeSheetId equals tr.TimeSheetId 
      where !ts.IsArchive && !ts.IsCompleted && tr.TimeOut != null 
      select (tr.TimeOut.Value - tr.TimeIn).TotalHours 
     ).Sum() 
    }; 

我不得不刪除MonthYear的事情,因爲我真的不明白怎麼適合您的分組,但因爲它不是在輸出中,我懷疑你可能不需要它。

我不得不作出一些假設:

  • 我假設TimeOutDateTime?(可爲空),而TimeInDateTime(非空的)。我認爲這是有道理的。

  • 我假設稱TimeSheets有StudentId是它們鏈接到的學生。

+0

MonthYear是alos輸出。我需要每個學生每月的時間表。 TimeIn和TimeOut DatTime(可空)。表關係學生1:N TimeSheetId(FK StudentId),時間表1:N TimeRecord(FK TimeSheetId) – Narazana 2010-08-20 03:53:05

+0

我加了查詢2,我認爲這是相當於你上面的C#和Talbe關係也。請參閱更新中的問題。 – Narazana 2010-08-20 04:08:01

+0

恐怕我不能爲你完成你的全部功課。請運行我的查詢,查看輸出,看看它是否做到了你想要的。如果沒有,那麼描述它需要不同的方式。 – Timwi 2010-08-20 04:11:01