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

时间:2018-01-12 16:24:44

标签: c# .net sql-server linq linq-to-sql

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

2 个答案:

答案 0 :(得分:0)

是的,这是LinQ中Deferred execution的目标。使用实体框架,您可以使用linQ和IQueryable进行查询。

答案 1 :(得分:0)

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

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