パブリッシュ/サブスクライブアーキテクチャでメッセージのリストがある場合、特定のメッセージを取得してメッセージの順序を信頼するために、基礎となるリストでIEnumerable.Whereを使用することは合理的です。LINQ拡張メソッドはどこに保障されていますか?
答えて
Enumerable.Where
拡張方法ですが、Queryable.Where
拡張方法はありません。
Enumerable.Where
は、結果をストリームし、キャッシュがなく(キャッシング結果にロジックがないため)、順序を保持する必要があります。
Queryable.Where
は、指定されたクエリを基礎となるデータソースが理解するものに変換します。したがって、これまでのものを順序付けすることについての保証はありません。この効果は、リレーショナルデータベースを使用して作業するときに容易に確認できます。 where
句を追加すると、データベースで別のインデックスを選択できるため、結果の順序が変更される可能性があります。
確かに、LINQ to Entitiesは '.Where() 'の後に* * *の順序を保持しないように文書化されています –
' Enumerable.Where'は現在のところ順序を保持していますが、インターフェイスのドキュメントには。もちろん、あなたが 'ParallelEnumerable'を使っているならば、全てのベットはオフになっています。 –
@ Jim: 'Enumerable.Where'のドキュメントには順序を保持するとは言いませんが、順序が常に保持されると想定するのは安全だと思います。開発者は依存しています。 – Steven
Linq to Objects/IEnumerable
これは本当です - 注文は維持されます - IQueryable
プロバイダーによって異なりますが、多くのプロバイダーは注文を維持しません。
MSDNではこの事実(保守指図)は文書化されていないようですので、将来は変わるかもしれない実装の詳細と考えています。
'IEnumerable'のインタフェースは、順序を保持するために文書化されていますか?それとも、私たちは「知っている」のだろうか? –
@Jim、 'IEnumerable'は' Where'をまったく持っていません。これは拡張メソッドとクエリパターンですが、インターフェイスのメンバーではありません。 –
@CraigStuntz:Fine。 'Enumerable.Where'、それから。注文を保存すると書かれた文書はありません。 –
- 1. TortoiseHg拡張はどこに保存されていますか?
- 2. LINQメソッドは拡張メソッドですか?
- 3. "Fold" LINQ拡張メソッドはどこですか?
- 4. LINQの拡張メソッド
- 5. LINQの拡張メソッド
- 6. NhQueryable LINQ拡張メソッド?
- 7. LINQの拡張メソッドは、
- 8. LINQの拡張メソッド - GetYearWeekFormat拡張
- 9. NHにLINQメソッドが含まれている拡張3
- 10. LINQとCount拡張メソッド
- 11. Chrome拡張イベントリスナーは正確にどこに保存されますか?
- 12. 拡張メソッドで表現された "from" LINQクエリの入れ子
- 13. 拡張属性はどこに格納されていますか?
- 14. ジェネリックスとLinq拡張メソッドを使用してリストをフィルタリングするにはどうすればよいですか?
- 15. Typescriptには拡張メソッドが含まれています
- 16. Tridion GUI拡張コマンドセットはjsメソッドにどのようにマップされますか?
- 17. アンドロイドメーカー:拡張メソッドは、この言語レベルでサポートされていません
- 18. タイプ引数エラーLINQの拡張メソッド
- 19. 再帰的IQueryable Linq拡張メソッド
- 20. これらの拡張メソッドは正しく見えますか?
- 21. IronPythonでLINQタイプと拡張メソッドを使用できますか?
- 22. 拡張メソッドが表示されない
- 23. Clojureで保護されたメソッドを拡張する方法
- 24. 拡張メソッドと拡張プロパティは悪い習慣ですか?
- 25. ケーキスクリプトでLinq拡張メソッドが見つかりません
- 26. IBuffer byte []。AsBuffer拡張メソッドはどこですか?
- 27. MVC 3ソースコードのLabelFor拡張メソッドはどこですか?
- 28. 拡張メソッドは
- 29. 拡張メソッドは
- 30. Safariには拡張機能がインストールされていますか?
実際には、「IEnumerable.Where」というメソッドはありません。 IEnumerableを受け入れる 'Enumerable.Where'拡張メソッドがあります。しかし、指定された列挙型に対して、与えられたLINQクエリが異なるものを使用することは完全に可能です。そして、それは、注文を保存するか、または注文を保存しない方法で実装することができます。 –
私はそれがメンバーではなく拡張方法であることを知っています。それは書くだけで簡単だったと私は誰もlinq拡張メソッドについて知っていると仮定します。 – LinusK
与えられた列挙型は、列挙する参照の型に応じて、 'Enumerable.Where()'の代わりに使用される独自の 'Where()'メソッドを定義するかもしれません。 –