Linq OrderBy不在If语句中工作
OrderBy子句的问题对排序没有任何影响。 我在调试器中已经完成了这个过程,并确保这是一个案例,即代码的排序行被命中,并且在订单生成之后尚未应用结果。
public static IEnumerable<DDLOptions> GetDDLOptionsViewModel( IEnumerable list, Func value, Func displayText, bool sort = true ) { List<DDLOptions> ddlOptions; ddlOptions = list.Select( l => new DDLOptions { Value = value(l), DisplayText = displayText(l) } ).ToList(); l.DisplayText); <===== Does NOT work here. } return ddlOptions; }
OrderBy
返回一个执行排序的查询:它不会修改原始列表(而像List
这样的东西会修改原始列表)
而是尝试类似的东西:
ddlOptions = ddlOptions.OrderBy(l => l.DisplayText).ToList();
编辑:您可能想要使用ddlOptions
的类型或者返回数据的位置/方式,因为我们正在做一个额外的ToList
不是必要的,但这对于这种情况来说可能是一个小问题/非问题。
尝试:
if (sort) { ddlOptions = ddlOptions.OrderBy(l => l.DisplayText); <===== Should work now. }
正如其他人所说的那样,你需要将OrderBy
的结果分配给某个东西,因为它不会改变它所依赖的序列。 最简单的方法是使ddlOptions
成为IEnumerable
而不是List
,这样就可以将结果分配给它了。 也不需要select上的ToList
调用:
public static IEnumerable> GetDDLOptionsViewModel( IEnumerable list, Func value, Func displayText, bool sort = true ) { IEnumerable> ddlOptions; ddlOptions = list.Select( l => new DDLOptions { Value = value(l), DisplayText = displayText(l) } ); if (sort) { ddlOptions = ddlOptions.OrderBy(l => l.DisplayText); } return ddlOptions; }
请注意,此版本的方法将使用延迟执行,因此在迭代序列之前不会实际执行Select / OrderBy。 如果您不想这样做,可以在return
行上添加ToList
。
你需要输入:
上述就是C#学习教程:Linq OrderBy不在If语句中工作分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
ddlOptions = ddlOptions.OrderBy(l => l.DisplayText);
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1011562.html