想象我有以下幾點:如何LINQ時推遲執行在using語句
private IEnumerable MyFunc(parameter a)
{
using(MyDataContext dc = new MyDataContext)
{
return dc.tablename.Select(row => row.parameter == a);
}
}
private void UsingFunc()
{
var result = MyFunc(new a());
foreach(var row in result)
{
//Do something
}
}
根據文檔的LINQ的執行將推遲,直到我實際列舉的結果,這在的foreach出現在該行。但是,使用語句應該在調用MyFunct()的最後強制收集對象。
究竟發生了什麼事情,處置者何時運行和/或結果如何運行?
我能想到的唯一的事情就是延遲執行計算在編譯的時候,這樣的實際調用是由編譯器移動到的foreach的第一行中,用正確執行造成的,但不運行,直到在foreach線? 有沒有可以幫助的古魯?
編輯:
注意:此代碼確實工作,我只是不明白如何。
我做了一些閱讀,並在代碼中意識到我已經調用了ToList()擴展方法,當然這些擴展方法枚舉了結果。被選中答案的行爲對於回答的實際問題是完全正確的。
對不起,有任何混淆。
不錯的問題。我被這個炸燬..一個使用(DataContext)爆炸壯觀 – Gishu 2009-01-19 06:52:41
我得到一個ObjectDisposedException「Dispose後訪問的DataContext」。當我嘗試這個。你的MyDataContext是LINQ設計器的自動生成的DataContext嗎?它是否從DataContext繼承? – 2009-01-19 07:44:36
我第三個概念:如果你通過使用「使用」來處理你的datacontext,你將會 - 如果你稍後嘗試使用datacontext,將會得到一個運行時異常。我知道我已經做到了。 – 2009-01-19 23:22:29