我有一个像这样的对象模型:
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; }
}
现在我想介绍一个只读属性TotalQuantity
on the Order
类应该汇总所有 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;
}
}
}
这不是一个好的解决方案,因为它会迭代 OrderDetails 两次。并且不支持类似的操作(即使 Quantity 类中提供了 + 运算符):
Quantity totalQuantity = OrderDetails.Sum(o => o.Quantity); // doesn't compile
在 LINQ 中是否有更好的方法来构建总和?
(仅出于理论兴趣,简单的 foreach 循环当然也能很好地完成其工作。)
感谢您的反馈!
Try:
OrderDetails.Select(o => o.Quantity).Aggregate((x, y) => x + y)
如果您不希望每次添加都有新的 Quantity 对象的开销(RE 注释),您可以使用类似以下内容的内容:
new Quantity {
Weight = OrderDetails.Select(o => o.Quantity.Weight).Sum(),
Volume = OrderDetails.Select(o => o.Quantity.Volume).Sum()
};
不像第一个那么好,而且比普通的更尴尬(而且更慢?)foreach
loop.
您可以找到更多关于Aggregate()
method on MSDN http://msdn.microsoft.com/en-us/library/bb548651.aspx.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)