Linq 到 SQL。如何按行读取结果而不将所有记录放入内存

Linq to SQL. How to read results by row and without putting all records into memory

是否可以逐行读取 Linq to SQL 结果,而不将整个结果存入内存?类似于 OleDB DbDataReader.Read().

是的,这就是 LinQ 中 Deferred execution 的目标。使用 Entity Framework,您可以使用 linQ 和 IQueryable 进行查询。

是的。 LINQ 默认推迟执行。即,项目仅在枚举发生时从源中读取。如果您直接使用 foreach(没有先调用 .ToArray().ToList()),结果集将不会作为一个整体存储在内存中。

但是,由于对象跟踪存储每个正在加载的对象的信息,对于非常大的结果集,您仍然会遇到内存溢出。为避免这种情况,请设置 context.ObjectTrackingEnabled = false;。作为副作用,您还会注意到性能提升。