C# 使用LINQ orderby关键字与orderby扩展方法的等效排序
我试图找到一组链接的C# 使用LINQ orderby关键字与orderby扩展方法的等效排序,c#,sorting,linq-to-objects,.net-3.5,C#,Sorting,Linq To Objects,.net 3.5,我试图找到一组链接的OrderBy/然后是by扩展方法调用,它相当于使用OrderBy关键字的LINQ语句 我使用orderby关键字的LINQ语句如下所示: List<Summary> sortedSummaries = new List<Summary>( from summary in unsortedSummaries orderby summary.FieldA ascending, summary.FieldB asce
OrderBy
/然后是by
扩展方法调用,它相当于使用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);
List<Summary> sortedSummaries = new List<Summary>(unsortedSummaries);
sortedSummaries.OrderBy(x => x.FieldA).ThenBy(x => x.FieldB).ThenBy(x => x.FieldC).ThenBy(x => x.FieldD);
但是,与使用orderby
关键字使用LINQ语句相比,这给出了完全不同的结果
我可能做错了什么
我试图转换为使用chained
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.sort
上面的查询正是原始代码的LINQ部分所做的。但是,如果我想从中构造一个列表,我不会将它传递给list
构造函数-我会使用ToList
扩展方法:
var sortedSummaries = unsortedSummaries.OrderBy(x => x.FieldA)
.ThenBy(x => x.FieldB)
.ThenBy(x => x.FieldC)
.ThenBy(x => x.FieldD)
.ToList();
检查它是否符合您的预期(它确实应该符合您的预期),然后您可以进行自定义比较。啊,是的,就是这样。现在完全有道理了。我以为我是在考虑LINQ操作符从未改变现有序列,但我一定是搞混了:)