Включите условную проверку в запрос с LINQ to SQL - PullRequest
1 голос
/ 20 августа 2010

Предложения в C # или VB.NET приветствуются.

Таблица отношений:

  • Ученик 1: N TimeSheet (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 ч. 23 мм. 53 с.
  • 3114 - 162: 25 часов 0 мм 21 с

Требуется результат запроса:

  • 733 - 158: 0 ч. 0 мм 0 с
  • 734 - 159: 9 часов 35 мм 28 секунд
  • 736 - 169: 0 часов 0 мм 0 секунд
  • 2655 - 160: 93 часа 33 мм 50 секунд
  • 1566 - 161: 37 ч. 23 мм. 53 с.
  • 3114 - 162: 25 часов 0 мм 21 с
  • 2165 - 189: 0 ч. 0 мм. 21 с.

Есть некоторые TimeSheet, у которых нет TimeRecord, которые я также должен выбрать. Как я могу выбрать все из них, чтобы сделать выбор, как указано выше желаемого результата? Я думаю о том, как я могу включить некоторые условия проверка в запросе, чтобы увидеть, если TimeSheet не имеет TimeRecord, то нет необходимости суммировать (tr.BonusHour), просто присвойте TotalHour ноль. Я не знаю, что это правильный путь.

Любое предложение приветствуется.

1 Ответ

0 голосов
/ 20 августа 2010

Вы можете попробовать сделать что-то подобное с Sum (C #):

Sum(tr.BonusHour ?? 0)

, который будет таким же, как

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

Я не уверен, какой тип имеет ваш BonusHour, поэтому вы бы использовали объект с нулевым соответствием этого типа вместо 0 в примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...