2012-10-24 72 views
2

我確定這是個愚蠢的問題,但我尋找答案並找不到一個答案。一對多關係的lambda表達式

我有表

  1. 客戶包含三列:用戶id,名稱和訂單ID。
  2. 訂單包含三列:orderId,userId,price。

這些表格之間的關係是ONE客戶要多少訂單。

我想總結某個用戶的訂單價格。 它應該看起來像這樣:

double totalPrice = currentUser.Orders.Sum(x=>x.price); 

這是行不通的。什麼是正確的方法來做到這一點?謝謝。

+0

什麼語言和哪個ORM? –

+0

'不起作用' - totalPrice的錯誤或價值不符合您的預期? – glosrob

回答

0
decimal totalPrice = users.SelectMany(user => user.Orders) 
         .Sum(order => (decimal?)order.Price) ?? 0; 

decimal totalPrice = (from user in users 
        from order in user.Orders 
        select (decimal?)order.Price).Sum() ?? 0; 

UPDATE

它使用double表示財務價值,因爲它是一個二進制浮點類型是不恰當的。鑄造product.Pricedecimal?表明,這是一個爲空的小數,因此使用Value屬性來獲取實際值的需要(如果存在的話,通過HasValue確定)

+0

可能值得說明你爲什麼需要這個。這是因爲如果訂單中沒有記錄(適用於用戶),則總和的結果爲空,如果期望雙重,則會產生轉場異常。 –

+0

我剛剛做了一個修正,解釋了爲什麼要使用'decimal?',這表明它是一個'可空'小數,所以如果該用戶的訂單價格爲空,那麼不會有任何鑄造異常。 – chridam

0

我想你應該選擇你的實體對象的用戶(以這種情況下,userId = 1)

  int i= users.Single(x => x.UserID== 1).Orders.Sum(x => x.Price);