質問: data.StoreDBHelper.DataContext.Customers as IQueryable ; ``` 同様に、IQueryableはIEnumerableを継承しています。 しかし、私が呼び出した場合、次のことを発見しました:custq.Sum()すると、プログラムは.toList()を呼び出したときにこれを処理します。 custq.ToList.Sum()を試しましたが、「as IQueryable」ではなく(問題がSQLサーバーで実行されていたため)、プログラムのメモリ使用量には影響しませんでした。 私の質問はこれだけです。Dlinqで「as IEnumerable」を使用しないでください。しかし、原則として「IQueryableとして」?標準の反復を実行している場合、「IEnumerableとして」と「IQueryableとして」の間で同じ結果が得られることは知っています。 しかし、それは違いがあるというwhereステートメントの要約関数とデリゲート式にすぎませんか、それとも、「as IQueryable」を使用すると、一般的にパフォーマンスが向上しますか? (DLinqエンティティの標準的な反復関数とフィルター関数の場合) よろしくお願いします!
回答: まあ、何をしたいかに依存します... IEnumerableとしてキャストすると、列挙できるオブジェクトが返されます...つまり、IEnumerableでCountを呼び出すと、リストが列挙され(実際に選択クエリを実行します)、各反復をカウントします。 一方、IQueryableを保持している場合は、それを列挙できますが、Were、OrderBy、countなどのデータベース操作を実行することもできます。これにより、クエリの実行が遅れ、最終的には実行前に変更されます。 列挙可能なオブジェクトでOrderByを呼び出すと、すべての結果が参照され、メモリ内で順序付けされます。クエリ可能オブジェクトでOrderByを呼び出すと、SQLの最後にORDER BYが追加され、データベースで順序付けが行われます。 一般に、それをIQueryableとして保持することをお勧めします、はい...実際にそれらを参照して(SELECT COUNT(*)...を実行する代わりに)カウントする必要がない限り、