我確定這是個愚蠢的問題,但我尋找答案並找不到一個答案。一對多關係的lambda表達式
我有表
- 客戶包含三列:用戶id,名稱和訂單ID。
- 訂單包含三列:orderId,userId,price。
這些表格之間的關係是ONE客戶要多少訂單。
我想總結某個用戶的訂單價格。 它應該看起來像這樣:
double totalPrice = currentUser.Orders.Sum(x=>x.price);
這是行不通的。什麼是正確的方法來做到這一點?謝謝。
我確定這是個愚蠢的問題,但我尋找答案並找不到一個答案。一對多關係的lambda表達式
我有表
這些表格之間的關係是ONE客戶要多少訂單。
我想總結某個用戶的訂單價格。 它應該看起來像這樣:
double totalPrice = currentUser.Orders.Sum(x=>x.price);
這是行不通的。什麼是正確的方法來做到這一點?謝謝。
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.Price
到decimal?
表明,這是一個爲空的小數,因此使用Value
屬性來獲取實際值的需要(如果存在的話,通過HasValue
確定)
可能值得說明你爲什麼需要這個。這是因爲如果訂單中沒有記錄(適用於用戶),則總和的結果爲空,如果期望雙重,則會產生轉場異常。 –
我剛剛做了一個修正,解釋了爲什麼要使用'decimal?',這表明它是一個'可空'小數,所以如果該用戶的訂單價格爲空,那麼不會有任何鑄造異常。 – chridam
我想你應該選擇你的實體對象的用戶(以這種情況下,userId = 1)
int i= users.Single(x => x.UserID== 1).Orders.Sum(x => x.Price);
什麼語言和哪個ORM? –
'不起作用' - totalPrice的錯誤或價值不符合您的預期? – glosrob