2

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

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 值分配给 System.Int32 类型的成员,该类型是不可为 null 的值类型。

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

4

2 回答 2

2

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

于 2012-04-07T09:50:43.193 回答
2

用它:

Quantity = productGroup.Sum(subOrder => (int?)subOrder.Quantity ?? 0)
于 2012-04-07T10:05:26.423 回答