gpt4 book ai didi

LINQ OrderBy 和 ThenBy

转载 作者:行者123 更新时间:2023-12-03 04:36:58 25 4
gpt4 key购买 nike

谁能解释一下两者之间的区别:

tmp = invoices.InvoiceCollection
.OrderBy(sort1 => sort1.InvoiceOwner.LastName)
.OrderBy(sort2 => sort2.InvoiceOwner.FirstName)
.OrderBy(sort3 => sort3.InvoiceID);

tmp = invoices.InvoiceCollection
.OrderBy(sort1 => sort1.InvoiceOwner.LastName)
.ThenBy(sort2 => sort2.InvoiceOwner.FirstName)
.ThenBy(sort3 => sort3.InvoiceID);

如果我想按 3 项数据排序,哪种方法是正确的?

最佳答案

绝对应该使用ThenBy而不是多个OrderBy来电。

我建议这样做:

tmp = invoices.InvoiceCollection
.OrderBy(o => o.InvoiceOwner.LastName)
.ThenBy(o => o.InvoiceOwner.FirstName)
.ThenBy(o => o.InvoiceID);

请注意如何每次都使用相同的名称。这也相当于:

tmp = from o in invoices.InvoiceCollection
orderby o.InvoiceOwner.LastName,
o.InvoiceOwner.FirstName,
o.InvoiceID
select o;

如果您调用OrderBy多次,它将有效地将序列完全重新排序三次......因此最终调用实际上将成为主导调用。您可以(在 LINQ to Objects 中)编写

foo.OrderBy(x).OrderBy(y).OrderBy(z)

这相当于

foo.OrderBy(z).ThenBy(y).ThenBy(x)

因为排序顺序是稳定的,但你绝对不应该:

  • 很难读
  • 它的性能不佳(因为它重新排序了整个序列)
  • 它可能在其他提供程序中无法工作(例如 LINQ to SQL)
  • 基本上不是这样 OrderBy被设计用于使用。

OrderBy的要点是提供“最重要”的订购预测;然后使用ThenBy (重复)指定二级、三级等排序预测。

实际上,可以这样想:OrderBy(...).ThenBy(...).ThenBy(...)允许您为任意两个对象构建单个复合比较,然后使用该复合比较对序列进行一次排序。这几乎肯定是您想要的。

关于LINQ OrderBy 和 ThenBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3760001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com