我的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>
这是我的控制员之一:
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>
有什么方法可以使用lambda表达式只显示与每个性别相关的产品的类别和品牌?我的意思是,当我为男人浏览产品时,我不希望“裙子”出现在“按类型”上,而且我不想在女士部分出现有男士产品的品牌。
答案 0 :(得分: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; }
}
然后在模板中:
@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>
}
这会产生类似的东西:
<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>