パブリッシュ/サブスクライブアーキテクチャでメッセージのリストがある場合、特定のメッセージを取得してメッセージの順序を信頼するために、基礎となるリストで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. NhQueryable LINQ拡張メソッド?
- 5. LINQの拡張メソッド
- 6. NHにLINQメソッドが含まれている拡張3
- 7. LINQの拡張メソッド - GetYearWeekFormat拡張
- 8. LINQとCount拡張メソッド
- 9. 拡張属性はどこに格納されていますか?
- 10. 拡張メソッドで表現された "from" LINQクエリの入れ子
- 11. アンドロイドメーカー:拡張メソッドは、この言語レベルでサポートされていません
- 12. ジェネリックスとLinq拡張メソッドを使用してリストをフィルタリングするにはどうすればよいですか?
- 13. Tridion GUI拡張コマンドセットはjsメソッドにどのようにマップされますか?
- 14. 拡張メソッドが表示されない
- 15. これらの拡張メソッドは正しく見えますか?
- 16. 再帰的IQueryable Linq拡張メソッド
- 17. タイプ引数エラーLINQの拡張メソッド
- 18. Clojureで保護されたメソッドを拡張する方法
- 19. IronPythonでLINQタイプと拡張メソッドを使用できますか?
- 20. 拡張メソッドは
- 21. 拡張メソッドは
- 22. MVC 3ソースコードのLabelFor拡張メソッドはどこですか?
- 23. IBuffer byte []。AsBuffer拡張メソッドはどこですか?
- 24. .NET 2.0または3.0で拡張メソッドとLINQを使用できますか?
- 25. 変換されたプロジェクト.net 2.0〜3.5、拡張メソッドはどこにありますか?
- 26. java.awt.Graphicsのメソッドはどこに定義されていますか?
- 27. FOSUserBundleのユーザーエンティティはどのように拡張されますか?
- 28. プロトタイプはタイプスクリプトでどのように拡張されますか?
- 29. VS Intellisense:拡張メソッドを隠すことはできますか?
- 30. ByteArrayのデータはどこに保存されていますか?
実際には、「IEnumerable.Where」というメソッドはありません。 IEnumerableを受け入れる 'Enumerable.Where'拡張メソッドがあります。しかし、指定された列挙型に対して、与えられたLINQクエリが異なるものを使用することは完全に可能です。そして、それは、注文を保存するか、または注文を保存しない方法で実装することができます。 –
私はそれがメンバーではなく拡張方法であることを知っています。それは書くだけで簡単だったと私は誰もlinq拡張メソッドについて知っていると仮定します。 – LinusK
与えられた列挙型は、列挙する参照の型に応じて、 'Enumerable.Where()'の代わりに使用される独自の 'Where()'メソッドを定義するかもしれません。 –