C# linqdatacontext处理问题
我得到了一个C# linqdatacontext处理问题,c#,.net,linq-to-sql,datacontext,C#,.net,Linq To Sql,Datacontext,我得到了一个无法访问的对象:DataContext,它在下面的DAL方法中被释放后。我想我可以打电话到那里result是一个IEnumurable,我认为是IQueryable导致了这些问题 我做错了什么?我应该如何处理我的DataContext。返回的数据表是否比返回的数据表更好?这是一个指向SQL 2005的桌面应用程序 导致此错误的示例方法--> 创建DataContext的分部类--> 在处理DataContext后,您正在调用CopyLinqToDataTable。由于LINQ使用
无法访问的对象:DataContext,它在下面的DAL方法中被释放后。我想我可以打电话到那里result
是一个IEnumurable
,我认为是IQueryable
导致了这些问题
我做错了什么?我应该如何处理我的DataContext
。返回的数据表是否比返回的数据表更好?这是一个指向SQL 2005的桌面应用程序
导致此错误的示例方法-->
创建DataContext的分部类-->
在处理DataContext后,您正在调用CopyLinqToDataTable
。由于LINQ使用延迟执行,因此它仅在DataContext被释放后,在枚举result
时执行查询
您应该使用包含return
语句的块将DataContext放入中。
这将在调用copylinkToDataTable
后处理DataContext,从而避免问题
例如:
using(var DB = CmoDataContext.Create()) {
//Execute queries
return result.CopyLinqToDataTable();
}
using
语句生成一个finally
块,该块在末尾处理DataContext
使用
块的的。(即使抛出异常)在调用Dispose
之前,您应该在查询中使用类似于ToList
的内容。您不能这样做吗
...
DataTable dt = result.CopyLinqToDataTable();
DB.Dispose();
return dt;
只要使用返回我就可以了??谢谢;你会没事的。(除非您返回一个IEnumerable
)好的,出于好奇,IEnumerable
仍然会在这里失败吗?那么您如何返回它呢?通过调用ToArray
。由于(同样)延迟执行的原因,如果您返回一个IEnumerable
,则在客户端(使用您的返回值)枚举它之前,查询不会运行。通过调用ToArray
并返回(可能包装在ReadOnlyCollection
中),您可以强制立即枚举可枚举项。List
是否可以绑定到DataGrids
等以及DataTable
?如果是这样,我会调查的。就我的返回类型而言,我所寻找的术语是“具体的”吗?
using(var DB = CmoDataContext.Create()) {
//Execute queries
return result.CopyLinqToDataTable();
}
...
DataTable dt = result.CopyLinqToDataTable();
DB.Dispose();
return dt;