【问题标题】:Lambda Expression for OrderByOrderBy 的 Lambda 表达式
【发布时间】:2012-04-20 09:30:01
【问题描述】:
///  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

【问题讨论】:

    标签: asp.net-mvc linq lambda


    【解决方案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()
    

    【讨论】:

    • 看看这样做,首先它会按 menu_id 排序,然后是 menu_parent 等等,我不想要这个,我希望菜单像第一个父级然后它的子级排序..
    • 我猜你没有得到我的问题,我有一个包含所有父菜单和子菜单的 menuTable,现在当在下拉列表中显示所有这些菜单时,我想显示为 parent,然后显示它的所有子 parent2然后是它的所有孩子......我编辑了我的问题
    • 更新答案,请测试
    • 是的,现在你明白我的意思了..thanx 人.. 我是这样做的,但我被困在Sort 变量中连接 2 个整数。现在我的问题解决了..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多