我有以下(简化)数据库表:
Products
- ProductID, int, PK
- Name, varchar(50)
Orders
- OrderID, int, PK
- ProductID, int, FK
- Quantity, int, not null
我想阅读所有产品,如果订单可用,请将该产品的所有订单数量相加。
SQL查询看起来像这样:
select p.ProductID, p.Name, sum(o.Quantity) from Products p
left join Orders o on p.ProductID = o.ProductID
group by p.ProductID, p.Name
现在,我想在Linq-to-SQL查询中翻译它。 到目前为止我已经达到了这个目标:
var query =
from p in Products
join o in Orders on p.ProductID equals o.ProductID into po
from subOrder in po.DefaultIfEmpty()
group subOrder by new
{
p.ProductID,
p.Name,
}
into productGroup
select new
{
productGroup.Key.ProductID,
productGroup.Key.Name,
Quantity = productGroup.Sum(subOrder => subOrder.Quantity)
};
虽然生成的SQL看起来很好,但我得到以下异常:
InvalidOperationException:无法将null值分配给a System.Int32类型的成员,它是一个不可为空的值类型。
有人可以告诉我查询有什么问题。任何帮助将不胜感激!
答案 0 :(得分:2)
改为使用productGroup.Sum(subOrder => (int?)subOrder.Quantity)
。
答案 1 :(得分:2)
使用它:
Quantity = productGroup.Sum(subOrder => (int?)subOrder.Quantity ?? 0)