次の関連フィールドを持つ 3 つのテーブル、Cust、Order、および Item があります。
Cust - CustID, CustName
Order - OrderID, CustID
Item - ItemID, OrderID
各顧客の注文とアイテムの合計数を見つけたいです。
これは、私が欲しいものを生成する SQL ステートメントです。各顧客の合計注文数と注文されたアイテムの合計数を含む顧客のリストです。
SELECT
Cust.CustID, Cust.CustName,
count(DISTINCT Order.OrderID) AS numOrders,
count(DISTINCT Item.ItemID ) AS numItems
FROM Cust
LEFT JOIN Order ON Order.CustID = Cust.CustID
LEFT JOIN Item ON Item.OrderID = Order.OrderID
GROUP BY Cust.CustID, Cust.CustName
ORDER BY numItems
これをLINQに変換する最初の試みは、アイテムを数えることで、これを思いつきました:
var qry = from Cust in tblCust
join Order in tblOrder on Cust.CustID equals Order.CustID
join Item in tblItem on Order.OrderID equals Item.OrderID
group Cust by new {CustID = Cust.CustID, CustName = Cust.CustName} into grp
orderby grp.Count()
select new
{
ID = grp.Key.CustID,
Name = grp.Key.CustName,
Cnt = grp.Count()
};
このコードでは、例外が発生します。
Value cannot be null. Parameter name: inner
私は正しい軌道に乗っていますか?両方のカウントを取得するにはどうすればよいですか?