Таким образом, проблема заключалась в том, что EF получал нулевое значение для любого ордера, у которого не было служебных линий, вместо добавления нуля.
Обе эти опции работают:
.Sum(
order =>
order.OrderLines.Select(n => new{n.quantity, n.price}).DefaultIfEmpty(new {quantity = 0, price = decimal.Zero}).Sum(line => line.quantity * line.price) + order.ServiceLines.Select(n => new{n.quantity, n.rate}).DefaultIfEmpty(new {quantity = 0, rate = decimal.Zero}).Sum(acl =>acl.quantity * acl.rate)
);
AND
.Sum(
order =>
order.OrderLines.Select(lines => new { LineTotal = lines.quantity * lines.price }).DefaultIfEmpty(new { LineTotal = Decimal.Zero }).Sum(x => x.LineTotal) + order.ServiceLines.Select(acl => new { AclTotal = acl.quantity * acl.rate }).DefaultIfEmpty(new { AclTotal = Decimal.Zero }).Sum(x => x.AclTotal)
);
Необходимо указать EF значение DefaultIfEmpty для анонимного объекта, в противном случае это будет добавление к нулю. Таким образом, EF получит OrderLineTotal (значение) + ServiceLineTotal (NULL) = NULL.