データベースにクエリを実行し、そこからオブジェクトのリストを作成しています。
通常、私のビジネス層から、タイプ IList のキャッシュされたオブジェクトのリストを返します。これを変更して IQueryable を返すと、どのような利点がありますか? IQueryable は、IList が提供しないものを教えてくれますか?
データベースにクエリを実行し、そこからオブジェクトのリストを作成しています。
通常、私のビジネス層から、タイプ IList のキャッシュされたオブジェクトのリストを返します。これを変更して IQueryable を返すと、どのような利点がありますか? IQueryable は、IList が提供しないものを教えてくれますか?
IQueryableは、データベースのクエリに使用されるインターフェイスであり、実装者が遅延実行やより最適化されたクエリの構築 (式ツリーの評価による) などの優れた処理を実行できるようにする機能を定義します。IList はそのどれも提供しません。
さらに、IQueryable は (ほとんどの場合)読み取り専用のインターフェイスです。IList は、ユーザーがコレクションを変更できるようにする Add、Remove などを定義します。それが意味的により理にかなっている場合は、必ずそれを使用してから、IEnumerable Linq 拡張機能を使用して IQueryable のほとんどの機能を取得してください。
私はすべての戻り値の型に IEnumerable を使用するのが好きです。単純な場合はそれを返すメソッドで List を使用して実装し、必要に応じてより特殊な具象クラスを使用します。利点は、IEnumerable を実装するクラスのクライアントを変更する必要がある場合はほとんどないことです。それがリストであるかハッシュテーブルであるかは気にしません。IList では、リストの使用に行き詰まっています。
ただし、LINQ-to-SQL を使用している場合、またはクラスで大量のデータを操作している場合、IQueryable は IEnumerable がサポートしていないいくつかのメソッドをサポートします。IEnumerable は ILIst と IQueryable の基本実装であるため、ほとんどの関数からの戻り値の型として IEnumerable を使用することをお勧めします
IQueryable と IEnumerable の違いについては、次の記事を参照してください。
IEnumerable<T> と IQueryable<T> を返すと IQueryable<T> と IEnumerable<T> の違いは何ですか?
データベースのクエリに使用する場合は、IQueryable の方が便利だと思います。そこからAPrta、IListを使用して、リストから特定のアイテムを追加、削除、取得できます。それはすべて、あなたがそれをどのように使いたいかによって異なります..
戻っIEnumerable<T>
てからどちらかにキャストして、より柔軟にすることもできます...しかしIQueryable<T>
、文字通りデータベースにクエリを実行する場合の実行にはより良いアプローチです。コレクションを操作する機能が必要な場合は、IList<T>