0

私たちの MVC4 アプリケーションでは、データベースに Orders テーブル、Products テーブル、Category テーブルがあります。すべての Order には外部キー関係に製品 (および数量) があり、製品は外部キーを持つカテゴリに属します。

したがって、Order には OrderId、ProductId (FK から Product)、データと数量があり、Product には ProductId、Name、および CategoryId (FK から Category) があり、Category には CategoryId と Name があります。

次に、その日に注文されたカテゴリを表示し、カテゴリ名の下に商品を表示する「買い物リスト」を作成します。

この質問に基づく以下のクエリは、まさにそれを行います(日付の確認を除く):

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

私はこれに苦労しており、それを行う方法を考えていました。誰かが私にいくつかの指針を教えてくれることを願っています

4

1 に答える 1

0

OK、タプルを作成して問題を解決しました。

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>
}

今のところ少し安っぽく見えますが、うまくいきます!

于 2013-11-11T11:18:14.030 に答える