/// Model
public class MenuModels
{
public Int32 MenuId { get; set; }
public string MenuName { get; set; }
public Int32 MenuLevel { get; set; }
public Int32 MenuParent { get; set; }
public string MenuUrl { get; set; }
}
/// In my Controller I have this code
Menus = menuRepository.GetAll().OrderBy(y=>y.menu_id+y.menu_parent+y.menu_level).ToList()
我想通过 3 个字段(id、parentId、level)的总和按升序获取所有菜单。
或者连接 2 个字段(id,parentId)
menuRepository.GetAll().OrderBy(y=>int.parse(y.menu_id.ToString+y.menu_parent.ToString)).ToList()
基本上我创建了一个菜单创建控制器,因为我有一个下拉列表来填充所有菜单,但我想在下拉列表中填充菜单
Home
--submenu1
--submenu2
Contact
--submenu1
--submenu2
为此,我在下面编写了代码
var menuModel = new MenuModels()
{
Menus = menuRepository.GetAll().ToList().Select(x =>
{
var level = x.menu_level;
return (level == 0)
? new SelectListItem {Text = x.menu_name, Value = x.menu_id.ToString()}
: new SelectListItem {Text = "-- "+x.menu_name, Value = x.menu_id.ToString()};
})
};
return View(menuModel);
但这并没有给我我的期望,我知道为什么,在数据库中我有类似的表
id level parent name
---------------------------
1 0 0 Home
2 0 0 About
3 1 1 submenu1
4 1 1 submenu2
5 1 2 submenu1
我为此进行了 sql 查询以更好地理解我的问题
select *,( Convert(nvarchar(50),(case when menu_parent=0 then menu_id else menu_parent end)) + '' + Convert(nvarchar (50),(menu_parent)))
as Sort from menu order by Sort,menu_id
这个查询结果像
id level parent name Sort
------------------------------------
1 0 0 Home 10
3 1 1 submenu1 11
4 1 1 submenu2 11
2 0 0 Abount 20
5 1 2 submenu1 22