Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# linqdatacontext处理问题_C#_.net_Linq To Sql_Datacontext - Fatal编程技术网

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;