任何人都可以解释之间的区别:
tmp = invoices.InvoiceCollection
.OrderBy(sort1 => sort1.InvoiceOwner.LastName)
.OrderBy(sort2 => sort2.InvoiceOwner.FirstName)
.OrderBy(sort3 => sort3.InvoiceID);
Run Code Online (Sandbox Code Playgroud)
和
tmp = invoices.InvoiceCollection
.OrderBy(sort1 => sort1.InvoiceOwner.LastName)
.ThenBy(sort2 => sort2.InvoiceOwner.FirstName)
.ThenBy(sort3 => sort3.InvoiceID);
Run Code Online (Sandbox Code Playgroud)
如果我想按3项数据订购,哪种方法是正确的?
Jon*_*eet 204
你绝对应该使用ThenBy而不是多次OrderBy调用.(我假设您的问题中的一个片段是打算使用的ThenBy.在撰写本文时,两个片段是相同的.)
我建议这样:
tmp = invoices.InvoiceCollection
.OrderBy(o => o.InvoiceOwner.LastName)
.ThenBy(o => o.InvoiceOwner.FirstName)
.ThenBy(o => o.InvoiceID);
Run Code Online (Sandbox Code Playgroud)
请注意每次如何使用相同的名称.这也相当于:
tmp = from o in invoices.InvoiceCollection
orderby o.InvoiceOwner.LastName,
o.InvoiceOwner.FirstName,
o.InvoiceID
select o;
Run Code Online (Sandbox Code Playgroud)
如果调用OrderBy多次,这将有效地重新排列顺序完全 三次...所以最后调用将有效地占主导地位.你可以(在LINQ to Objects中)编写
foo.OrderBy(x).OrderBy(y).OrderBy(z)
Run Code Online (Sandbox Code Playgroud)
这相当于
foo.OrderBy(z).ThenBy(y).ThenBy(x)
Run Code Online (Sandbox Code Playgroud)
因为排序顺序是稳定的,但你绝对不应该:
OrderBy设计使用.重点OrderBy是提供"最重要"的排序预测; 然后使用ThenBy(重复)指定二级,三级等排序预测.
实际上,可以这样考虑:OrderBy(...).ThenBy(...).ThenBy(...)允许您为任何两个对象构建单个复合比较,然后使用该复合比较对序列进行一次排序.这几乎可以肯定你想要的.
| 归档时间: |
|
| 查看次数: |
36797 次 |
| 最近记录: |