我的场景是:我有一个名为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();
但当然没有用,所以我需要帮助才能在第一个之后只订购元素
答案 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;