ОТВЕТ: Просто чтобы проинформировать всех об этом, я прибег к другому подходу ...
Поскольку я использую SQL CE и он не поддерживает виды или функции Lead / Lag, я решил добавить новый столбец PreviousEndTime
в свою таблицу. Это был единственный изящный способ, который я смог найти, который позволил мне легко запросить общий расчет на Employee
. Это не мое предпочтительное решение, но оно работает нормально для меня ...
Единственный недостаток этого подхода заключается в том, что когда пользователь обновляет свои EndTime
в любой записи, мне нужно быстро выполнить поиск, чтобы найти запись next и обновить значение PreviousEndTime
до убедитесь, что мои вычисления возвращают правильные значения при запросе.
Вот небольшой фрагмент псевдокода того, что я сейчас делаю:
public decimal GetTotalPay(Employee employee) {
return (from row in _timeSheet.GetDetailRows(employee.Id)
select ((row.StartTime - row.PreviousEndTime) * employee.OffDutyWage) +
((row.EndTime - row.StartTime) * employee.OnDutyWage)).Sum();
}
Спасибо за все отзывы.