Reputation: 3911
/// 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()
I want to get all the menus in ascending order by sum of 3 fields(id,parentId,level).
or else concatenation of 2 fields(id,parentId)
menuRepository.GetAll().OrderBy(y=>int.parse(y.menu_id.ToString+y.menu_parent.ToString)).ToList()
Basically im creating a MENU Create Controller in that i have a dropdownlist that fills the all the menus, but i want to fill menus in dropdown like
Home
--submenu1
--submenu2
Contact
--submenu1
--submenu2
for this i have written code below
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);
But this doesn't give me what im expecting and i know why, in database i have table like
id level parent name
---------------------------
1 0 0 Home
2 0 0 About
3 1 1 submenu1
4 1 1 submenu2
5 1 2 submenu1
i made sql query for this to get better understanding my problem
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
this query results like
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
Upvotes: 1
Views: 1192
Reputation: 2569
Use
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()
Upvotes: 1