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

基本的に、私はすべてのメニューを埋めるドロップダウンリストを持っているという点でMENU Create Controllerを作成していますが、次のようにドロップダウンでメニューを埋めたいです

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 に答える