Asp.net mvc Orderby子句不适用于mvc中的下拉列表

Asp.net mvc Orderby子句不适用于mvc中的下拉列表,asp.net-mvc,entity-framework,linq,Asp.net Mvc,Entity Framework,Linq,我正在使用Linq填充一个下拉列表,而orderby子句似乎不起作用 public List<Hello> getManagers() { var que = (from man in db.Table1 where man.Role == "Manager" orderby man.Name s

我正在使用Linq填充一个下拉列表,而orderby子句似乎不起作用

 public List<Hello> getManagers()
         {
             var que = (from man in db.Table1
                        where man.Role == "Manager"
                        orderby man.Name
                        select new Hello
                        {
                           Managers = man.Name
                        }).Distinct().ToList();
             return que;
         }
公共列表getManagers() { var que=(来自db.Table1中的man) 其中man.Role==“经理” 命令人,姓名 选择新建Hello { 经理=人。姓名 }).Distinct().ToList(); 回程时间; } 控制器类:

public ActionResult Index()
        {
            rp = new RequestProcess();
            ViewBag.ID = fillSelectedList("", "ID", rp);
            ViewBag.Managers = fillSelectedList("", "Managers", rp);
            return View(""); //View 1
        }
public static List<SelectListItem> fillSelectedList(string selValue, string type,  RequestProcess rp )
        {
            List<SelectListItem> list = new List<SelectListItem>();
            SelectListItem obj = new SelectListItem();
            if (type == "Managers") {
                 var tempList= rp.getManagers(); 
                tempList.ForEach(x =>
                {
                    obj = new SelectListItem();
                    obj.Text = x.Managers;
                    obj.Value = x.Managers;
                    obj.Selected = x.Managers == selValue ? true : false;
                    list.Add(obj);
                });
            }
            return list;
        }
public ActionResult Index()
{
rp=新的RequestProcess();
ViewBag.ID=fillSelectedList(“,”ID“,rp);
ViewBag.Managers=fillSelectedList(“,“Managers”,rp);
返回视图(“”;//视图1
}
公共静态列表fillSelectedList(字符串selValue、字符串类型、RequestProcess rp)
{
列表=新列表();
SelectListItem obj=新建SelectListItem();
如果(类型==“管理者”){
var templast=rp.getManagers();
templast.ForEach(x=>
{
obj=新建SelectListItem();
obj.Text=x.经理;
目标价值=x个管理者;
obj.Selected=x.Managers==selValue?真:假;
列表。添加(obj);
});
}
退货清单;
}

我仍然收到一份未排序的列表。有任何修复吗?

结果不按顺序排列,因为方法
Distinct
不返回按顺序排列的结果。您需要做的是首先调用
Disctinct
,然后才调用
OrderBy

var que = (from man in db.Table1
    where man.Role == "Manager"
    select new Hello
    {
        Managers = man.Name
    }).Distinct()               // <- First distinct ...
    .OrderBy(x => x.Managers)   // <- ... then order by
    .ToList();
var que=(来自db.Table1中的man
其中man.Role==“经理”
选择新建Hello
{
经理=人。姓名

}).Distinct()///x.Managers)//结果没有排序,因为方法
Distinct
不返回排序结果。您需要做的是首先调用
Disctinct
,然后才调用
OrderBy

var que = (from man in db.Table1
    where man.Role == "Manager"
    select new Hello
    {
        Managers = man.Name
    }).Distinct()               // <- First distinct ...
    .OrderBy(x => x.Managers)   // <- ... then order by
    .ToList();
var que=(来自db.Table1中的man
其中man.Role==“经理”
选择新建Hello
{
经理=人。姓名

}).Distinct()//x.Managers)//如上所述,您需要在
Distinct()
之后对结果进行排序

还请注意,您正在混合Lambda表达式和LINQ到实体查询。。。您可能想考虑为一致性选择其中一个(尽管混合它们没有语法错误)。这是使用lambda表达式的相同查询:

 var que = _context.Table1
           .Where(m => m.Role == "Manager")
           .Select(h => new Hello { Managers = h.Name })
           .Distinct()
           .OrderBy(o => o.Managers)
           .ToList();

如上所述,您需要在
Distinct()
之后对结果进行排序

还请注意,您正在混合Lambda表达式和LINQ到实体查询。。。您可能想考虑为一致性选择其中一个(尽管混合它们没有语法错误)。这是使用lambda表达式的相同查询:

 var que = _context.Table1
           .Where(m => m.Role == "Manager")
           .Select(h => new Hello { Managers = h.Name })
           .Distinct()
           .OrderBy(o => o.Managers)
           .ToList();

您在哪里调用
getManagers()
?什么是
fillSelectedList()?
@StephenMuecke更新了编辑,忘记了那部分。你在哪里调用
GetManager()
?什么是
fillSelectedList()?
@StephenMuecke更新了编辑,忘记了那部分。谢谢!!工作得很卖力谢谢你!!工作得很有魅力!谢谢:)注意到了!谢谢:)