Я хочу преобразовать эту 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>
}