0

我的场景是:我有一个MenuBO使用 linq 调用的类,它有一个调用的函数,该函数SelectAll()返回一个对象列表menu以用作 a DataSourcefor a 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();

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

4

2 回答 2

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;

这通过简单地首先添加默认菜单项然后按照查询中定义的顺序添加已经排序的菜单项来优雅地解决您的问题。

于 2012-10-10T14:51:24.697 回答
1

你可以只使用插入而不是添加

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;
于 2012-10-10T14:51:35.457 回答