У меня есть объектная модель вроде этой:
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-код?