次のように最近のインタビューで、私はIQueryableをとのIEnumerableの違いについて尋ね、と私はいくつかの記事を読んで、要約されています:
IQueryableはIEnumerableインターフェイスから継承する、ということを理解すること1.インターフェースです。
2.のIQueryable式ツリーが、それは、その利点の一つとして見ることができます。したがって、このような最初の式ツリーは、データベース操作が実際に行われる場合、それはデータを取得するために式ツリーを実行するキャッシュされるデータのフィルタリング、ソート、およびその他の操作、などのIQueryable操作を、使用しているとき。
それは、このようなデータの2つのトップ2行を選択として、言うことです、それは最初のキャッシュは、式ツリーにフィルタトップ2を取得します。データベースの操作の時までは、データベースのトップ2のデータをフィルタリングします。=「のIQueryable遅延ローディングメカニズムが存在する直接データデータベースからフィルタ。
3. IEnumerableを、動作するように、そのデータとのIQueryable異なる、それはメモリ内にデータベースから取り出したすべてのデータを進めます。次に、ソート、フィルタリングを含むフィルタリング動作のメモリ内のデータ、など。=>でIEnumerableをデータメモリフィルタ
我々はエレベーターでリポジトリを説明するために例を使用します
パブリック クラスEmployeeRepository:IEmployeeRepository { プライベート 読み取り専用CompanyContextの_context。 公共EmployeeRepository(CompanyContextコンテキスト) { _context = 文脈。 } 公共のIEnumerable <従業員> GetIEnumerableEmployees() { 戻り_context.Employeesと、 } 公共のIQueryable <従業員> GetIQueryableEmployees() { 戻り_context.Employeesと、 } }