Суммируйте коллекцию объектов, которые содержат числовые свойства, только с 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; }
}

Теперь я хочу ввести свойство только для чтения TotalQuantity в 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 тоже, конечно, хорошо справится со своей работой.)

Спасибо за отзыв! Но как это сделать? Могу ли я скомпилировать как процедурный, так и объектно-ориентированный код PHP?

Я поискал в Интернете и узнал, что код PHP можно скомпилировать для повышения производительности. Но как это сделать? Могу ли я скомпилировать как процедурный, так и объектно-ориентированный PHP-код?

23
задан Gumbo 10 April 2011 в 16:07
поделиться