如何解决LINQ orderby关键字与OrderBy扩展方法的等效排序
|| 我正在尝试提出一组链接的OrderBy
/ThenBy
扩展方法调用,这些方法等效于使用orderby
关键字的LINQ语句。
我的使用orderby
关键字的LINQ语句如下所示:
List<Summary> sortedSummaries = new List<Summary>(
from summary in unsortedSummaries
orderby summary.FieldA ascending,summary.FieldB ascending,summary.FieldC ascending,summary.FieldD ascending
select summary);
现在,我猜想使用链式OrderBy
/ThenBy
扩展方法调用的等效版本如下所示:
List<Summary> sortedSummaries = new List<Summary>(unsortedSummaries);
sortedSummaries.OrderBy(x => x.FieldA).ThenBy(x => x.FieldB).ThenBy(x => x.FieldC).ThenBy(x => x.FieldD);
但是,与使用results2ѭ关键字使用LINQ语句相比,这给我带来了截然不同的结果。
我在这里可能做错了什么?
我尝试转换为使用链接的OrderBy
/ThenBy
扩展方法调用的原因是,我需要在FieldD
上使用自定义比较器,如下所示:
.ThenBy(x => x.FieldD,new NaturalSortComparer())
我无法弄清楚如何使用带有orderby
关键字的LINQ语句来执行此操作,因此我认为使用扩展方法可能会使我走得更远,但是由于我无法获得扩展方法版本来提供与以下结果相同的结果我的orderby
关键字版本,暂时回到了画板。
有任何想法吗?
解决方法
点表示法调用不会将结果分配给任何对象。应该是:
var sortedSummaries = unsortedSummaries.OrderBy(x => x.FieldA)
.ThenBy(x => x.FieldB)
.ThenBy(x => x.FieldC)
.ThenBy(x => x.FieldD);
别忘了LINQ运算符永远不会更改现有序列-它们返回具有适当差异(在这种情况下为排序)的新序列。如果要就地排序,请使用List<T>.Sort
。
上面的查询正是您原始代码的LINQ部分所做的。但是,如果我想从中构造一个列表,则不会将其传递给List<T>
构造函数-我将使用ToList
扩展方法:
var sortedSummaries = unsortedSummaries.OrderBy(x => x.FieldA)
.ThenBy(x => x.FieldB)
.ThenBy(x => x.FieldC)
.ThenBy(x => x.FieldD)
.ToList();
检查该功能是否符合您的预期(它确实应该如此)-然后可以放入自定义比较。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。