Для запроса Linq нужна правильная сумма - PullRequest
1 голос
/ 22 февраля 2012

Я использую диаграммы визуализации данных .NET 4 и использую запрос Linq для получения данных для диаграммы. Я новичок в Linq, поэтому не уверен, как сформулировать этот запрос. Вот то, что он делает, у меня есть следующие таблицы его данные извлечения из

  1. Заказы
  2. График отгрузки

Таблица заказов содержит заказанный продукт, идентификатор заказа, сумму отгрузки и оставшееся количество для этого заказа. В одном заказе может быть только один товар. Я пытаюсь получить все Заказы в классе 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)
            });
        }

1 Ответ

0 голосов
/ 22 февраля 2012

Насколько я понимаю, в вашей группе товаров должно быть много OrderShipment объектов, сгруппированных по названию продукта. Затем вы хотите суммировать количество и количество отправлений, которые должны быть одинаковыми, и хотите просто принять это значение?

Если это так, то вам следует:

QtyRemaining = productGroup.First();

Если я неправильно понял, вы можете упростить объяснение, возможно, с примером ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...