4
我有3個表,卡斯特,訂單和項目具有以下相關領域:LINQ多到SQL連接,GROUP BY和計數
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
上午我在正確的軌道上?我需要做什麼才能獲得這兩個數字?
謝謝,這完美的作品。 – 2012-07-20 17:33:08
雖然有一個問題,「orderby grp.Count()」如何與「numIems」相關? – 2012-07-20 17:41:20
@JimRhodes - 我更新了答案以修復排序 – Aducci 2012-07-20 18:04:19