2011-11-14 10 views
1

MVCアプリケーションに複数レベルのドロップダウンメニューがあり、ブランド、性別、タイプ別にソートしようとしています。特定の製品を含むカテゴリのみを選択するラムダ式

<li>Man 
      <ul> 
       <li><h2>By Type</h2></li> 
       <li>CATEGORY</li> 
      </ul> 
      <ul> 
       <li><h2>By Brand</h2></li> 
       <li>BRAND</li> 
      </ul> 
     </div> 
    </li> 
    <li> 
    <li>Woman 
      <ul> 
       <li><h2>Categories</h2></li> 
       <li>CATEGORY</li> 
      </ul> 
      <ul> 
       <li><h2>Brands</h2></li> 
       <li>BRAND</li> 
      </ul> 
     </div> 
    </li> 
    <li> 

を、ここで私のコントローラのいずれかである:私のメニューはこのようになります。これは、メニューの中にロードpartialviewある

public ActionResult Man(int type) 
    { 
     var productTypeModel = storeDB.Categories.Include("Products") 
      .Single(g => g.CategoryId == type); 

     return View(productTypeModel); 
    } 

@model IEnumerable<Store.Models.Category> 
<ul> 
<li><h2>By Type</h2></li> 
@foreach (var type in Model) 
{ 
    <li>@Html.ActionLink(type.Name, 
      "Man", "Store", 
      new { Category = type.CategoryId }, null) 
    </li> 
} 
</ul> 

は、どのような方法があることラムダ式を使用して各性別に関連付けられた商品を持つカテゴリとブランドのみを表示できますか?男性用の製品をブラウズしているときに「タイプ別」に「スカート」を表示したくないということです。レディースセクションに男性用の製品が入っているブランドは必要ありません。

答えて

1

あなたはGROUPBY使用することができます

public ActionResult Menu() 
{ 
    var model = 
     from p in storeDB.Products.Include("Category").Include("Type") 
     group p by p.Gender 
     into genderGroup 
     select new MenuObject 
     { 
      Gender = genderGroup.Key, 
      Categories = 
      (
       from p2 in genderGroup 
       group p2 by p2.Category 
       into categoryGroup 
       select categoryGroup.Key 
      ), 
      Types = 
      (
       from p3 in genderGroup 
       group p3 by p3.Type 
       into typeGroup 
       select typeGroup.Key 
      ) 
     }; 

    return View(model); 
} 

public class MenuObject 
{ 
    public string Gender { get; set; } 
    public IEnumerable<Category> Categories { get; set; } 
    public IEnumerable<Type> Types { get; set; } 
} 

をそしてテンプレートで:

<li>Man 
    <ul> 
     <li><h2>By Category</h2></li> 
     <li><a href="/Store/ByCategory/Man/2/">Sports</a></li> 
     <li><a href="/Store/ByCategory/Man/3/">Underwear</a></li> 
    </ul> 
    <ul> 
     <li><h2>By Type</h2></li> 
     <li><a href="/Store/ByType/Man/1/">Boxer Shorts</a></li> 
     <li><a href="/Store/ByType/Man/2/">Socks</a></li> 
    </ul> 
</li> 
<li>Woman 
    <ul> 
     <li><h2>By Category</h2></li> 
     <li><a href="/Store/ByCategory/Woman/1/">Running</a></li> 
     <li><a href="/Store/ByCategory/Woman/2/">Sports</a></li> 
     <li><a href="/Store/ByCategory/Woman/3/">Underwear</a></li> 
    </ul> 
    <ul> 
     <li><h2>By Type</h2></li> 
     <li><a href="/Store/ByType/Woman/2/">Socks</a></li> 
     <li><a href="/Store/ByType/Woman/3/">Bra</a></li> 
    </ul> 
</li> 
+0

うわー:

@foreach (var item in Model) { <li>@item.Gender <ul> <li><h2>By Category</h2></li> @foreach (var category in item.Categories) { <li>@Html.ActionLink(category.Name, "ByCategory", "Store", new { Gender = item.Gender, Category = category.ID, }, null)</li> } </ul> <ul> <li><h2>By Type</h2></li> @foreach (var type in item.Types) { <li>@Html.ActionLink(type.Name, "ByType", "Store", new { Gender = item.Gender, Type = type.ID, }, null)</li> } </ul> </li> } 

これは、のようなものを生成します!ありがとうございました!それは私が数ヶ月前に解決しようとしている問題を解決しました! – Samuel

関連する問題