7
對象的集合,我有一個對象模型是這樣的:總和包含數值屬性只與LINQ
public class Quantity
{
public decimal Weight { get; set; }
public decimal Volume { get; set; }
// perhaps more decimals...
public static Quantity operator +(Quantity quantity1, Quantity quantity2)
{
return new Quantity()
{
Weight = quantity1.Weight + quantity2.Weight,
Volume = quantity1.Volume + quantity2.Volume
};
}
}
public class OrderDetail
{
public Quantity Quantity { get; set; }
}
public class Order
{
public IEnumerable<OrderDetail> OrderDetails { get; set; }
}
現在我想在Order
類應該總結的大量引進一個只讀屬性TotalQuantity
所有OrderDetails。
我想知道是否有更好「LINQ辦法」比這
public class Order
{
// ...
public Quantity TotalQuantity
{
get
{
Quantity totalQuantity = new Quantity();
if (OrderDetails != null)
{
totalQuantity.Weight =
OrderDetails.Sum(o => o.Quantity.Weight);
totalQuantity.Volume =
OrderDetails.Sum(o => o.Quantity.Volume);
}
return totalQuantity;
}
}
}
這不是因爲它通過訂單明細兩次迭代一個很好的解決方案。而這樣的事情是不支持(即使+運營商正處在由量的類提供):
Quantity totalQuantity = OrderDetails.Sum(o => o.Quantity); // doesn't compile
是否有更好的方法來構建LINQ總和?
(只是爲了理論興趣,一個簡單的foreach循環也會做,當然它的工作做好。)
感謝您的反饋!
在這種情況下,您不需要WhateverProperty,因爲TotalQuantity返回一個數量 – 2011-04-10 16:07:48
@Thomas:謝謝。隨着我不斷重新解釋這個問題,我做了一番編輯。解決了這個問題,並沒有想到要解決這個問題。 :) – 2011-04-10 16:14:20
太棒了,它的工作原理!謝謝!我只是想第二次談論我的話,那就是我的問題解決方案不是一個「很好的解決方案」。它只創建一個'Quantity'對象,然後累加小數兩次以構建總和,而使用+重載爲每個二進制添加創建一個新的Quantity對象。我不確定什麼是更好的性能明智,雖然使用+運算符使代碼看起來更友好。但那是另一個問題。 – Slauma 2011-04-10 16:17:57