Linqでは、拡張メソッドWhereはコレクションを返しIEnumerableますが、並べ替えメソッドOrderByはコレクションを返しIOrderedEnumerableます。
したがって、で終わるOrderBy(つまり、を返すIOrderedEnumerable)クエリがある場合、後でメソッドを追加することはできません。Whereコンパイラは、に渡される型について文句を言いWhereます。
var query = Process.GetProcesses()
.Where(p => p.ProcessName.Length < 10)
.OrderBy(p => p.Id);
query = query.Where(p => p.ProcessName.Length < 5);
ただし、すべてを1つのクエリで実行する場合は、問題ありません。
var query = Process.GetProcesses()
.Where(p => p.ProcessName.Length < 10)
.OrderBy(p => p.Id)
.Where(p => p.ProcessName.Length < 5);
Reflectorでアセンブリを調べて、コンパイラがいずれかの操作を並べ替えているかどうかを確認しましたが、そうではないようです。これはどのように作動しますか?