У меня есть таблица счетов.Мой сервисный уровень знает, как рассчитать счет-фактуру Total
для одного счета-фактуры, но если я хочу отфильтровать набор счетов-фактур по Total
, запрос LINQ не будет выполнен, так как существует «Нет поддерживаемых переводов в SQL».Это происходит потому, что вложенный запрос не может быть выполнен для каждой записи счета.Как правильно обойти это?
Каждый счет Total
определяется суммированием рассчитанных итоговых строк из таблицы InvoiceLines
, которые включают скидки, буквально:
public decimal Total
{
get
{
return Lines.Sum(l => l.LineTotal); // Lines provided by repository
}
}
IЯ предпочитаю не дублировать бизнес-логику в моей базе данных, которая уже находится на моем уровне обслуживания, что включает в себя дисконтирование позиций, которые влияют на сумму счета.Но я не вижу другого способа, кроме кэширования счета-фактуры Total
в столбце базы данных, который я могу напрямую фильтровать.
Счета-фактуры являются неизменяемыми, поэтому это не должно приводить к каким-либо проблемам с целостностью данных, ноЯ ненавижу дублировать данные.Я мог бы использовать представление для отображения суммы счета-фактуры, но тогда мой репозиторий выполняет функции уровня обслуживания.