Linq OrderBy不在If语句中工作

Cha*_*son 4 c# linq

OrderBy子句的问题对排序没有任何影响.我已经在调试器中完成了这个工作,并确保这是一种情况,即代码的排序行被命中并且在订单之后查看结果尚未应用.

public static IEnumerable<DDLOptions<TValueType>> GetDDLOptionsViewModel<TClass, TValueType>(
            IEnumerable<TClass> list, 
            Func<TClass, TValueType> value, 
            Func<TClass, string> displayText,
            bool sort = true
        )
        {
            List<DDLOptions<TValueType>> ddlOptions;

            ddlOptions = list.Select(
                l => new DDLOptions<TValueType>
                        {
                            Value = value(l),
                            DisplayText = displayText(l)
                        }
                    ).ToList();  <========== Works if I put the Order By here.

            if (sort)
            {
                ddlOptions.OrderBy(l => l.DisplayText); <===== Does NOT work here.
            }

            return ddlOptions;
        }
Run Code Online (Sandbox Code Playgroud)

Chr*_*air 11

OrderBy 返回一个执行排序的查询:它不会修改原始列表(而类似的东西List<T>.Sort会修改原始列表)

而是试着像:

ddlOptions = ddlOptions.OrderBy(l => l.DisplayText).ToList();
Run Code Online (Sandbox Code Playgroud)

编辑:您可能想要使用ddlOptions返回数据的类型或位置/方式,因为我们正在做一些额外的操作ToList,但这对于这种情况来说可能是一个小问题/非问题.


Ven*_*son 6

尝试:

if (sort)
{
    ddlOptions = ddlOptions.OrderBy(l => l.DisplayText); <===== Should work now.
}
Run Code Online (Sandbox Code Playgroud)