Я думаю, проблема в том, что в SQL функция SUM может возвращать ноль, а Ling-to-SQL ожидает int.Вы можете обойти это, выполнив это:
TotalQuantity =
(int?)c.Orders.SelectMany(o => o.Order_Details).Sum(o=>o.Quantity)
и затем проверив наличие нулевых значений.Я думаю, что это также будет работать
TotalQuantity =
((int?)c.Orders.SelectMany(o => o.Order_Details).Sum(o=>o.Quantity)) ?? 0
, если вы хотите установить значение по умолчанию 0.
Причина, по которой это происходит, заключается в том, что SQL, генерируемый Linq-to-SQL, приводит к нулевому значениюдля столбца количества, когда нет подробностей.Простой способ определить причину этой ошибки - установить db.Log в Console.Out, скопировать сгенерированный SQL в SSMS и посмотреть, каковы результаты.Вероятно, вы увидите, что сгенерированный SQL создает левое соединение, что приводит к одному или нескольким нулевым значениям в столбце Количество.Либо так, либо будет подзапрос, который приведет к нулевому значению.