IEnumerable
については、メモリにフィルタリングを適用し、IQueryable
のようなSQL Serverではフィルタリングを適用しないという記事がたくさん出てきました。IEnumerableフィルタリングではなくSQL内でのメモリ?
しかし、
私はテーブルonly one has Id = '12345'
のうち20 records
を持っています。
私が行うと
IEnumerable<Customer> customer = _context.Customer.where(x => x.Id== '12345');
それは1
行とnot of 20
行を返します。 なぜですか?
私の理解では、それはそれは1つのレコードを返します後、私は
var result = customers.ToList();
を行う際に、最初に20行を返しますです。
行は返されません。結果を反復処理するときに評価される式を返します。その式には、その評価に含まれる "where"節が含まれています。 – David
"遅延実行"とは何かを誤解しています。それは、20行すべてが返されることを意味するものではありません。 Entity Frameworkで作成されたすべてのクエリにどれくらいの費用がかかるか考えてみましょう。それが意味することは、あなたのクエリはちょうどそのことです:クエリ。 'foreach'、' ToList'、 'ToArray'など何らかの反復の形で実行を強制するまでは実行されません。 –
' customer'が'IEnumerable'が 'IQueryable 'を保持できないという意味ではありません。 'IQueryable 'は 'IEnumerable 'を実装しています:https://msdn.microsoft.com/en-us/library/system.linq.iqueryable(v=vs.110).aspxそれで ' IEnumerable '、あなたの例では、基礎となるオブジェクトは' IQueryable 'です。 –
David