1
///  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
4

1 回答 1

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()
于 2012-04-20T09:41:49.253 回答