2012-04-20 72 views
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)的总和升序排列所有菜单。OrderBy的Lambda表达式

或2场的其他级联(ID,parentId的)

menuRepository.GetAll().OrderBy(y=>int.parse(y.menu_id.ToString+y.menu_parent.ToString)).ToList() 

基本上即时创建菜单在创建控制器我有填充所有菜单一个下拉列表,但我想,以填补在下拉菜单下面

 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); 

但THI像

Home 
--submenu1 
--submenu2 
Contact 
--submenu1 
--submenu2 

为了这个,我已经写代码s不给我什么即时通讯期待,我知道为什么, 在数据库中,我有表像

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 

回答

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() 
+0

看到doin'这个,首先它将按menu_id然后menu_parent等进行排序,我不想要这个,我想菜单排序像第一个父母,然后它的孩子.. – FosterZ 2012-04-20 09:47:04

+0

你试着运行代码?我希望这应该工作 – 2012-04-20 09:59:39

+0

我想你没有得到我的问题,即时通讯有一个菜单表,其中包含所有的父母和孩子的菜单,现在当在下拉菜单中显示所有这些菜单,我想显示像父母,然后所有的孩子父母,然后所有的孩子..我编辑我的问题 – FosterZ 2012-04-20 10:19:07