Я использую диаграммы визуализации данных .NET 4 и использую запрос Linq для получения данных для диаграммы. Я новичок в Linq, поэтому не уверен, как сформулировать этот запрос. Вот то, что он делает, у меня есть следующие таблицы его данные извлечения из
- Заказы
- График отгрузки
Таблица заказов содержит заказанный продукт, идентификатор заказа, сумму отгрузки и оставшееся количество для этого заказа. В одном заказе может быть только один товар. Я пытаюсь получить все Заказы в классе OrderShipment, создать для него Список <>, сгруппировать его по каждому продукту и показать общее количество для каждого продукта, который был заказан, и того, что было отправлено. Приведенный ниже запрос суммирует количество отгруженных для всех заказов, что является правильным, но поскольку он составляет список заказов, я хочу, чтобы оставшееся количество для каждого заказа по всем отгрузкам и суммировалось по продукту. Прямо сейчас он складывает оставшееся количество для всех отправлений, что неверно, так как Заказ имеет одинаковое оставшееся количество для всех отправлений. Как я могу получить оставшееся количество для каждого продукта, чтобы запрос правильно складывал Оставшееся количество по каждому заказу? Пожалуйста, приведите пример с кодом, как это сделать, если у вас есть предложение, ваша помощь очень ценится, спасибо
private class ChartDataPoint
{
public string ProductName { get; set; }
public double QtyRemaining { get; set; }
public double QtyShipped { get; set; }
}
private class OrderShipment
{
public string ProductName { get; set; }
public double QuantityRemaining { get; set; }
public double QuantityShipped { get; set; }
public int OrderId { get; set; }
}
List<OrderShipment> productsOrdered =
(from os in Statistics.OptimalShipments
from o in Statistics.OrdersPlaced
where ((os.Date >= Statistics.ShippingWindowStartDate) &&
(os.Date <= Statistics.ShippingWindowEndDate) &&
(os.OrderId == o.OrderId) &&
((o.ClientLocationId == ClientLocation.ClientLocationId)))
select new OrderShipment()
{
ProductName = o.Product.Name,
QuantityRemaining = o.RemainingQuantity,
QuantityShipped = os.QuantityShipped,
}).ToList();
var query = productsOrdered.GroupBy(p => p.ProductName);
List<ChartDataPoint> chartDataPoints = new List<ChartDataPoint>();
foreach (var productGroup in query)
{
chartDataPoints.Add(new ChartDataPoint()
{
ProductName = productGroup.Key,
// This is obv wrong this sums up the Remaining quantity across
// all shipments for a order when we should be only taking the
//Remaining quantity once for each order across all shipments.
QtyRemaining = productGroup.Sum(po => po.QuantityRemaining),
QtyShipped = productGroup.Sum(po => po.QuantityShipped)
});
}