我一直在使用Linq-to-SQL一段时间,它工作的很好。但是,最近我一直在尝试使用它来获取大量的数据,并且遇到了一些问题。 (当然,我明白,L2S可能不是这种特殊处理的合适的工具,但是这就是为什么我在尝试 - 找到它的极限。)您是否可以使用Linq-to-SQL获得类似DataReader的流式传输?
下面是一个代码示例:
var buf = new StringBuilder();
var dc = new DataContext(AppSettings.ConnectionString);
var records = from a in dc.GetTable<MyReallyBigTable>() where a.State == "OH" select a;
var i = 0;
foreach (var record in records) {
buf.AppendLine(record.ID.ToString());
i += 1;
if (i > 3) {
break; // Takes forever...
}
}
一旦我开始迭代数据,查询就会按预期执行。在单步执行代码时,我立即进入了这个循环,这正是我所希望的 - 这意味着L2S似乎在后台使用DataReader,而不是首先提取所有数据。但是,一旦我到达break
,查询将继续运行并将所有其余记录拉出。以下是我对SO社区的问题:
1.)有没有办法阻止Linq-to-SQL在DataReader
的中途停止执行真正的大查询?
2.)如果你执行一个大的Linq-to-SQL查询,是否有办法阻止DataContext填充每个返回对象的变更跟踪信息。基本上,我可以使用DataReader
技术做一个很短的对象生命周期查询,而不是填充内存吗?
我很好,如果这不是DataContext
本身的功能,并且需要通过一些定制扩展功能。我只是希望利用Linq的简单性和强大功能来处理夜间处理任务的大型查询,而不是依赖于T-SQL处理所有事情。