/// 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
答案 0 :(得分:1)
使用
menuRepository.GetAll().
select(y= new MenuDatastructure()
{
//rest of the properties like menuid,menuName etc,
sortColumn = //concat the fields to get sort column like 10,11,11,20,22
}
).OrderBy(y=>y.sortColumn).ToList()