カスタム オブジェクトを含む ArrayList を使用しようとしています。配列リストがソートされます。LINQ to objects を使用して複数のフィールドを検索しています。オブジェクト検索への LINQ は、基になる並べ替えを使用するか、配列リスト全体をスキャンします。
質問する
102 次
1 に答える
1
LINQ 拡張メソッドは、基になる並べ替えを利用しません。これらのメソッドは IEnumerable で動作するように記述されているため、基になるコレクションについて何も想定できません。実装を見ると、一部の LINQ メソッドは入力が ICollection であるかどうかをチェックし、そうである場合は対応するメソッドを呼び出して (Count() はこのように機能すると思います)、線形スキャンを回避する可能性がありますが、この場合は配列がソートされていることを LINQ が検出する方法はないため、その事実を利用することはできません。
さらに、 myList.Where(o => o.Prop1 < 2 && o.Prop2 == 3) のようなことをしている場合、 Where() に渡される Func<> は LINQ に対して完全に不透明であるため、それを行う方法はありません。リストがソートされていることを知っていたとしても、どのプロパティが調べられているかを知ることができました。
于 2012-09-15T00:41:48.400 に答える