Как правильно выполнить корреляцию вычисляемого поля модели Entity Framework?

Здравствуйте!
Есть некоторое вычисляемое поле в модели Entity Framework:
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
            [NotMapped]
            public int? WorkingTime
            { get {
                    var query = (from e in context.events
                                 join a in context.actions on e.CurrEventID equals a.CurrEventID into es
                                 from p in es.DefaultIfEmpty()
                                 select new { UnitDate = e.ActionDate, UnitId = e.CurrEventID, HeaderID = p.HeaderID, IsDone = p.MarkerOn, Begin = e.BeginTime, End = e.EndTime })
                                .Where(w => w.HeaderID == this.HeaderID)
                                .Where(w => w.IsDone == true)
                                .Distinct()
                                .Select(s =>  DbFunctions.DiffMinutes(s.Begin, s.End)).Sum();
                    return query ?? 0;
               } }

Для каждого HeaderID выполняется вычисление WorkingTime по всем строкам БД. Необходимо ввести внешнее ограничение по диапазону запрашиваемых дат (текущая дата хранится в поле UnitDate). Модель хранится отдельно от клиента, из которого выполняется вызов. Подскажите, как решить эту задачу?
  • Вопрос задан
  • 2829 просмотров
Пригласить эксперта
Ответы на вопрос 1
yamaoto
@yamaoto
la programmeur
Реализовать в виде хелпера?
public static class Helper{
public static int? GetWorkingTime(this MyContext context){
var query = (from e in context.events
                                 join a in context.actions on e.CurrEventID equals a.CurrEventID into es
                                 from p in es.DefaultIfEmpty()
                                 select new { UnitDate = e.ActionDate, UnitId = e.CurrEventID, HeaderID = p.HeaderID, IsDone = p.MarkerOn, Begin = e.BeginTime, End = e.EndTime })
                                .Where(w => w.HeaderID == this.HeaderID)
                                .Where(w => w.IsDone == true && w.Begin<w.UnitDate && w.UnitDate<w.End )
                                .Distinct()
                                .Select(s =>  DbFunctions.DiffMinutes(s.Begin, s.End)).Sum();
                    return query ?? 0;
}
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы