我有以下函数调用:
public static MvcHtmlString NavLinks(
this HtmlHelper helper,
IList<MenuItem> menuItems) {
在这个函数中,我知道我可以使用以下内容循环使用menuItems
foreach (MenuItem menuItem in menuItems) {
<code here>
}
但我需要做的是通过menuItems列表同时使用外部和 内部循环显示顶部菜单的一些代码,然后代表每个顶部菜单项的子菜单项。
因此,每次menuItem.Outer的值发生更改时,我都要执行某些操作,然后继续使用不同的menuItem.Inner读取记录,直到外部循环的值再次更改为止。
以下是我的数据的示例。我只显示两列,其中第1列表示menuItem.Outer,第2列表示menuItem.Inner
示例数据
.....
00 - do outer loop open action A
01 - do inner loop open action B
02 - do inner loop close action C, open action B
10 - do inner loop close action C, outer loop close action D and outer loop open action A
11 - do inner loop open action A
12 - do inner loop close action C, open action B
....
....
"no more data" - do inner loop close action C, outer loop close action D
....
行动:
action A that needs executing when the outer loop starts
action D that needs executing when the outer loop ends
action B that needs executing when the inner loop starts
action C that needs executing when the inner loop ends
有没有一种简单的方法可以在不使用foreach的情况下完成此操作?
答案 0 :(得分:1)
您可以使用GroupBy Extension Method:
foreach (var group in menuItems.GroupBy(item => item.Outer))
{
// begin outer menu "group.Key"
foreach (var item in group)
{
// inner menu "item.Inner"
}
// end outer menu
}