我有以下(简化的)数据库表:
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 的值类型。
有人可以告诉我查询有什么问题。任何帮助,将不胜感激!