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でアセンブリを調べて、コンパイラがいずれかの操作を並べ替えているかどうかを確認しましたが、そうではないようです。これはどのように作動しますか?