gpt4 book ai didi

c# - linq:单独的 orderby 和 thenby 语句

转载 作者:太空宇宙 更新时间:2023-11-03 19:18:50 25 4
gpt4 key购买 nike

我正在通过此处的 101 Linq 教程进行编码:

http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

大多数示例都很简单,但是这个让我大吃一惊:

    [Category("Ordering Operators")]
[Description("The first query in this sample uses method syntax to call OrderBy and ThenBy with a custom comparer to " +
"sort first by word length and then by a case-insensitive sort of the words in an array. " +
"The second two queries show another way to perform the same task.")]
public void Linq36()
{
string[] words = { "aPPLE", "AbAcUs", "bRaNcH", "BlUeBeRrY", "ClOvEr", "cHeRry", "b1" };

var sortedWords =
words.OrderBy(a => a.Length)
.ThenBy(a => a, new CaseInsensitiveComparer());

// Another way. TODO is this use of ThenBy correct? It seems to work on this sample array.
var sortedWords2 =
from word in words
orderby word.Length
select word;

var sortedWords3 = sortedWords2.ThenBy(a => a, new CaseInsensitiveComparer());

无论我使用哪种单词组合,长度始终是第一个排序标准......即使我不知道第二个语句(没有 orderby!)如何知道原始 orderby 子句是什么。

我要疯了吗?谁能解释 Linq 是如何“记住”原始顺序的?

最佳答案

OrderBy 的返回类型不是 IEnumerable<T> .这是IOrderedEnumerable<T> .这是一个“记住”所有给定顺序的对象,只要您不调用另一个方法将变量变回 IEnumerable。它将保留该知识。

请参阅 Jon Skeets 精彩的博客系列 Eduling,在其中他重新实现了 Linq-to-objects 以获取更多信息。 OrderBy 上的关键条目/ThenBy是:

关于c# - linq:单独的 orderby 和 thenby 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14060428/

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