在MVC4视图中按类别分组订单

时间:2013-11-11 10:22:27

标签: c# sql asp.net-mvc-4 razor lambda

在我们的MVC4应用程序中,我的数据库有一个Orders表,一个Products表和一个Category表。每个订单在外键关系中都有一个产品(加上数量),并且该产品属于具有外键的类别。

因此Order有OrderId,ProductId(FK到产品),数据加数量,Product有ProductId,Name和CategoryId(FK到Category),Category有CategoryId和Name。

现在我们要制作一个“购物清单”,显示白天订购的类别,并在类别名称下方显示产品。

以下基于此question的查询就是这样做的(除了检查日期):

public ActionResult Index()
    {
        var orders = db.Orders.Include(o => o.Product)
            .Include(o => o.Product.Category)
            .GroupBy(o => o.Product.Category.Name)
            .Select(cat => cat.FirstOrDefault());

        return View(orders.ToList());
    } 

在我们的视图中,我可以通过以下方式显示不同的类别:

@foreach (var cat in Model) {
   <table>
       <tr>
           <td>
                @Html.DisplayFor(catName=> cat.Product.Category.Name)
           </td>
        </tr>
   </table>
}

下一步是在for循环中显示不同的订购产品和数量。所以它看起来像这样,例如:

*Fruit*
Banana x2
Apple x1

*Drinks*
Milk x1

我正在努力解决这个问题并且想知道该怎么做。我希望有人可以给我一些指示

1 个答案:

答案 0 :(得分:0)

好的,我们通过制作一个元组解决了这个问题:

public ActionResult Index()
{
    var orders = db.Orders.Include(o => o.Product)
        .GroupBy(o => o.Product.Category.Name)
        .Select(cat => cat.FirstOrDefault());

    var products = db.Orders.Include(o => o.Product);

    return View(Tuple.Create(orders.ToList(), products.ToList()));
}

并在视图中:

@foreach (var item in Model.Item1) {
   <table>
       <tr>
           <td>
               @Html.DisplayFor(catName => item.Product.Category.Name)
               <br />

               @foreach (var product in Model.Item2)
               {
                  if (product.Product.Category.Name == item.Product.Category.Name)
                  {
                        @Html.DisplayFor(productName => product.Product.Name)
                        @Html.DisplayFor(productName => product.Quantity) <br />
                  }
               }

           </td>
        </tr>
   </table>
}

截至目前看起来有点蹩脚,但它确实有效!