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

これを使って:

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

productGroup.Sum(subOrder => (int?)subOrder.Quantity)代わりに使用してください。

于 2012-04-07T09:50:43.193 に答える