Csharp/C#教程:Linq OrderBy不在If语句中工作分享


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.Sort这样的东西会修改原始列表)

而是尝试类似的东西:

 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

(0)
上一篇 2021年12月30日
下一篇 2021年12月30日

精彩推荐