我有一個列表Customers
,每個人都有一個列表Orders
。每個Order
都有一個LineItems
的列表。如何根據訂單的價值獲得排名前10的客戶
我想編寫一個LINQ查詢,根據訂單價值(即花費的金額),而不是訂單總數,讓我成爲前10名客戶。
一個客戶可能有2個訂單,但可能花費了10,000英鎊,但另一個客戶可能有100個訂單,並且只花費了500英鎊。
現在,我有這個讓訂單數量排在前10位的客戶。
var customers = (from c in _context.Customers where c.SaleOrders.Count > 0
let activeCount = c.SaleOrders.Count(so => so.Status != SaleOrderStatus.Cancelled)
orderby activeCount descending
select c).Take(10);
UPDATE
由於喬恩斯基特的這樣做了雙Sum
評論,我寫了下面的查詢來編譯。
var customers = (from c in _context.Customers where c.SaleOrders.Count > 0
let orderSum = c.SaleOrders.Where(so => so.Status != SaleOrderStatus.Cancelled)
.Sum(so => so.LineItems.Sum(li => li.CalculateTotal()))
orderby orderSum descending
select c).Take(10);
但是當我運行它,我得到以下錯誤:
看來LINQ不承認我的.CalculateTotal()
方法,它坐在我的LineItem.cs
實體。
因此,而不是使用'Count'你需要使用'Sum'總結這些訂單的價值...... –
我試過了,但因爲名單沒有工作'LineItem'實體是需要總結的,不是嗎? – Ciwan
您應該準確顯示您嘗試過的內容 - 有可能需要兩次*(每個訂單一次,然後一次總計訂單總計...) –