是否可以逐行读取Linq to SQL结果,而不将整个结果放入内存?类似于OleDB DbDataReader.Read()。
答案 0 :(得分:0)
是的,这是LinQ中Deferred execution的目标。使用实体框架,您可以使用linQ和IQueryable进行查询。
答案 1 :(得分:0)
是。 LINQ默认延迟执行。即,只有在枚举发生时才从源中读取项目。如果您直接使用foreach
(不先调用.ToArray()
或.ToList()
),结果集将不会作为整体存储在内存中。
但是,由于对象跟踪存储了正在加载的每个对象的信息,因此对于非常大的结果集,仍然可以获得内存溢出。为避免这种情况,请设置context.ObjectTrackingEnabled = false;
。作为副作用,您还会注意到性能提升。