Добавьте свойство к вашему частичному классу Task, аналогично этому:
public int ActualDuration
{
get {
YourDataContext db = new YourDataContext();
return
db.TaskDurations.Where(t => t.task_id == this.id).
Sum (t => t.duration);
}
}
Затем вы можете ссылаться на фактическую продолжительность как Task.ActualDuration.
Обновление: вы спрашивали о том, как сделать это с частичным классом. Конечно, это снова попадает в базу данных. Единственный способ получить данные из базы данных, которую вы еще не знаете, - это получить доступ к базе данных. Если вам необходимо избежать этого по соображениям производительности, напишите подзапрос или функцию SQL, которая вычисляет фактическую продолжительность, и используйте представление «Задачи», которое включает рассчитанное значение. Теперь функция / запрос все равно должна будет агрегировать введенные значения длительности для каждой строки задачи в наборе результатов, поэтому она по-прежнему будет требовательной к производительности. Если у вас очень большая таблица задач и проблемы с производительностью, продолжайте подсчет рабочих таблиц. Я думаю, что даже частичное решение для класса подходит для нескольких сотен тысяч задач. Я полагаю, вы редко получаете большое количество одновременно. Элементы управления сеткой с подкачкой получают только страницу в данный момент.