【发布时间】:2009-01-19 06:18:27
【问题描述】:
想象一下我有以下几点:
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 的行中。但是 using 语句应该强制在调用 MyFunct() 结束时可靠地收集对象。
实际发生了什么,处理器何时运行和/或结果运行?
我唯一能想到的是延迟执行是在编译时计算的,因此编译器将实际调用移动到 foreach 的第一行,导致 using 正确执行,但直到 foreach 行才运行? 有没有大神可以帮忙?
编辑:注意:这段代码确实有效,我只是不明白如何。
我做了一些阅读,并在我的代码中意识到我调用了 ToList() 扩展方法,该方法当然会枚举结果。勾选答案的行为对于回答的实际问题是完全正确的。
如有任何混淆,请见谅。
【问题讨论】:
-
好问题。我被这个炸了.. Using(DataContext) 爆炸了
-
我得到一个 ObjectDisposedException “DataContext 在 Dispose 之后访问。”当我尝试这个时。您的 MyDataContext 是 LINQ 设计器自动生成的 DataContext 吗?它是否继承自 DataContext?
-
第三个概念:如果您使用“Using”处理您的数据上下文,如果您稍后尝试使用该数据上下文,您将获得运行时异常。我知道我已经做到了。
-
向所有人道歉,看看我更新的问题,你是完全正确的。
标签: c# .net linq idisposable using