Как я могу использовать foreach вместо функции Join? - PullRequest
0 голосов
/ 25 февраля 2019

Я хочу преобразовать эту join операцию в foreach, потому что это сработало, только если Incoming product 'materialId и depotId совпадают с outgoing product' materialId и depotId.Но если для того же материала и идентификатора депо с входящим продуктом нет исходящего продукта, я хочу отобразить только количество входящего продукта на складе.Поэтому я должен сделать foreach, который циклически обрабатывает incomingProductTotals и извлекает его совпадающую исходящую сумму, чтобы сделать остальное внутри foreach.Но я не мог.

var incomingProductTotals = Model.IncomingProduct
            .GroupBy(x => new { x.depotId, x.materialId })
            .Select(g => new
            {
                g.Key.materialId,
                g.Key.depotId,
                total = g.Sum(t => t.amount)
            });

        // retrieve all outgoing product totals (with materialId, depotId and total)
        var outgoingProductTotals = Model.OutgoingProduct
            .GroupBy(x => new { x.depotId, x.materialId })
            .Select(g => new
            {
                g.Key.materialId,
                g.Key.depotId,
                total = g.Sum(t => t.amount)
            });
    var totals = incomingProductTotals
                .Join(
                    outgoingProductTotals,
                    incoming => new { incoming.materialId, incoming.depotId },
                    outgoing => new { outgoing.materialId, outgoing.depotId },
                    (incoming, outgoing) => new
                    {
                        incoming.materialId,
                        incoming.depotId,
                        Total = incoming.total - outgoing.total
                    });

            foreach (var item in totals)
            {
                <tr>
                <td> @item.materialId </td>
                <td> @item.depotId </td>
                <td> @item.Total</td>
                </tr>
            }

1 Ответ

0 голосов
/ 25 февраля 2019
        var incomingProductTotals = Model.IncomingProduct
        .GroupBy(x => new { x.depotId, x.materialId })
        .Select(g => new
        {
            g.Key.materialId,
            g.Key.depotId,
            total = g.Sum(t => t.amount)
        });

        // retrieve all outgoing product totals (with materialId, depotId and total)
        var outgoingProductTotals = Model.OutgoingProduct
        .GroupBy(x => new { x.depotId, x.materialId })
        .Select(g => new
        {
            g.Key.materialId,
            g.Key.depotId,
            total = g.Sum(t => t.amount)
        });

        foreach(var inProduct in incomingProductTotals)
        {
            var outProduct = outgoingProductTotals.where(p => p.materialId == inProduct.materialId && p.depotId == inProduct.depotId).FirstOrDefault();
            if(outProduct != null)
            {
               <tr>
                   <td> @inProduct.materialId </td>
                   <td> @inProduct.depotId </td>
                   <td> @(inProduct.Total - outProduct.Total)</td>
               </tr>
             }

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