使用left join和sum()的Linq To SQL抛出异常

时间:2012-04-07 09:48:55

标签: c# sql linq

我有以下(简化)数据库表:

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类型的成员,它是一个不可为空的值类型。

有人可以告诉我查询有什么问题。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

改为使用productGroup.Sum(subOrder => (int?)subOrder.Quantity)

答案 1 :(得分:2)

使用它:

Quantity = productGroup.Sum(subOrder => (int?)subOrder.Quantity ?? 0)