次の(簡略化された)データベーステーブルがあります。
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 値を割り当てることはできません。
誰かがクエリの何が問題なのか教えてください。どんな助けでも大歓迎です!