These are all the good options I came up with. I prefer option 2.
var option1 = list.GroupBy(orderDetail => new { orderDetail.OrderNumber, orderDetail.ItemNumber, orderDetail.LineNumber })
.Select(orderDetailGrouped => new OrderDetail(orderDetailGrouped.First(), orderDetailGrouped.Sum(i => i.Quantity)));
var option2 = list.GroupBy(orderDetail => new { orderDetail.OrderNumber, orderDetail.ItemNumber, orderDetail.LineNumber })
.Select(orderDetailGrouped =>
{
var orderDetail = orderDetailGrouped.First();
orderDetail.Quantity = orderDetailGrouped.Sum(i => i.Quantity);
return orderDetail;
});
var option3 = list.GroupBy(orderDetail => new { orderDetail.OrderNumber, orderDetail.ItemNumber, orderDetail.LineNumber })
.Select(orderDetailGrouped => new OrderDetail
{
OrderNumber = orderDetailGrouped.Key.OrderNumber,
ItemNumber =orderDetailGrouped.Key.ItemNumber,
LineNumber = orderDetailGrouped.Key.LineNumber,
Quantity = orderDetailGrouped.Sum(i => i.Quantity)
});
var option4 = list.GroupBy(orderDetail => new { orderDetail.OrderNumber, orderDetail.ItemNumber, orderDetail.LineNumber })
.Select(orderDetailGrouped => new OrderDetail
{
OrderNumber = orderDetailGrouped.First().OrderNumber,
ItemNumber = orderDetailGrouped.First().ItemNumber,
LineNumber = orderDetailGrouped.First().LineNumber,
Quantity = orderDetailGrouped.Sum(s => s.Quantity)
}) ;