如何循环和分组具有相同ID的项目

时间:2014-12-02 20:27:05

标签: asp.net-mvc linq razor

我需要能够按ID显示每个产品。 例如,如果我有3个具有相同ID的产品:计算数量并只显示一次。 当id不同时显示另一个产品。

产品1数量2价格10小计20

产品2数量1价格20小计20

这是当前的代码。

 <div class="yourorder">
            @foreach (var group in Model.Products.GroupBy(p => p.ID))
            {
                foreach (var prod in group)
                {
                    <div data-type="product" data-id="@group.First().ID" data-multiple="@group.First().Multiple" data-multiplecatid="@group.First().MultipleCategoryID" style="overflow:hidden;"></div>                            
                        @{Html.RenderAction("ShoppingCartProduct", "ShoppingCart", new { id = group.First().ID });}

                    </div>
                <br />
                <hr />
                }
            }
    </div

Joce提出的解决方案为我提供了分组框和数量。我想我可以使用:@ group.First()。计数 - 每个盒子

如果一个方框有相同的5个项目,我希望能够显示该项目的单价以及该方框的小计。我知道计算是单价*数量

但我不知道如果在名为“ShoppingCartProduct”的另一个PartialView中计算价格,我该如何计算每个产品小计。这是调用该视图计算价格的行:

@{Html.RenderAction("ShoppingCartProduct", "ShoppingCart", new { id = group.First().ID});}

ShoppingCartProduct的内容:

    <div class="shoppingCartPrice">
@if (Model.Prod.HasRange && Model.Prod.WeightFrom.HasValue && Model.Prod.WeightTo.HasValue)
{
    <div>Price: $@Model.Prod.Price.Value.ToString("0.00")</div>
}

是否有人可以指导我如何进行计算,以便输出:

产品1数量2价格10小计20(数量*单价)

产品2数量1价格20小计20(数量*单价)

非常感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用IEnumerable GroupBy的扩展方法,然后在每个组中循环。

<div class="yourorder">
    @foreach (var group in Model.Products.GroupBy(p => p.ID))
    {
        foreach (var prod in group)
        {
            //Calculate subtotal here
        }

        <div data-type="product" data-id="@group.First().ID" data-multiple="@group.First().Multiple" data-multiplecatid="@group.First().MultipleCategoryID" style="overflow:hidden;"></div>
        <br />
        <div class="fancyDivider"></div>
    }
</div>

<强> 编辑:

函数GroupBy将与分组对应的每个项目分组。在您的示例中,它是ID。 这就是为什么你必须:

  1. 循环遍历每个组并计算小计,如果有多个 小组中的一个项目
  2. 显示每个组的div。
  3. 要计算小计,您可以通过获取该组的第一个产品来获得产品单价,并将其与产品数量相比较:

    var subtotal = group.First().UnitPrice * group.Count()
    

    现在,为了能够在PartialView中计算小计,您需要做两件事:

    1. 产品
    2. 此产品的数量
    3. 所以,你可以这样做:

      @{Html.RenderAction("ShoppingCartProduct", "ShoppingCart", 
           new { id = group.First().ID, Count = group.Count()});}