ここから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());
どの単語の組み合わせを投げても、長さは常に最初の順序付けの基準です... 2番目のステートメント(orderbyなし!)が元のorderby句が何であるかをどのように知っているかはわかりませんが。
私は夢中になりますか?Linqが元の順序をどのように「記憶」しているかを誰かが説明できますか?