我一直在使用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處理所有事情。