OrderBy列表中的特定元素

时间:2012-10-10 14:48:49

标签: asp.net linq list

我的场景是:我有一个名为MenuBO的类使用linq,它有一个名为SelectAll()的函数,它返回一个对象menu的列表,用作DataSource } DropDownList。在返回之前,我需要在列表中插入一个新项目作为DropDownList的默认值

这是我到目前为止所尝试的内容:

public List<menu> SelectAll()
{
    using (var db = new SeloQual_AdminEntities(conn))
    {
        menu vmenu = new menu();
        vmenu.cod_menu = 0;
        vmenu.cod_menu_pai = null;
        vmenu.des_menu = "Select...";
        var query = from p in db.menu orderby p.des_menu select p;
        var test = query.ToList();
        test.Add(vmenu);
        return test.OrderBy(x => x.cod_menu).ToList();
    }
}

OrderBy(x => x.cod_menu)完成工作,vmenu项目显示在我想要的顶部,但我需要des_menu订购其他项目。我试过像

这样的东西
return teste.OrderBy(x => x.cod_menu).ThenBy(y => y.des_menu).ToList();

但当然没有用,所以我需要帮助才能在第一个之后只订购元素

2 个答案:

答案 0 :(得分:3)

我认为你真正想要的是以下代码:

menu vmenu = new menu();
vmenu.cod_menu = 0;
vmenu.cod_menu_pai = null;
vmenu.des_menu = "Select...";
var query = from p in db.menu orderby p.des_menu select p;

List<menu> result = new List<menu>();
result.Add(vmenu);
result.AddRange(query);
return result;

这样可以优先解决您的问题,只需先添加默认菜单项,然后按查询中定义的顺序添加已排序的菜单项。

答案 1 :(得分:1)

您可以使用Insert代替添加

var vmenu = new menu{
    cod_menu = 0,
    des_menu="Select..."
    };
List<menu>res = db.menu.OrderBy(p => p.des_menu).ToList();
res.Insert(0,vmenu);
return res;