Jag*_*agd 5 gridview iqueryable asp.net-4.0 linq-to-sql
这个问题纯粹是学术性的,因为我从来没有想过在实际代码中这样做.
使用LINQ to SQL,我想绑定IQueryable<T>
到GridView.我尝试使用以下代码执行此操作,但我得到了异常:
无法访问已处置的对象.对象名:'Dispose后访问的DataContext.'.
这是我的代码,它IQueryable<tabGenre>
使用LINQ to SQL:
public static IQueryable<lu_Genre> GetGenres2() {
using (BooksContextDataContext ctx = new BooksContextDataContext()) {
IQueryable<tabGenre> iq = from g in ctx.tabGenre
select g;
return iq;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的代码,它将GridView绑定到返回的IQueryable<T>
.
private void GetGenres() {
gvGenre.DataSource = Genre.GetGenres2();
gvGenre.DataBind();
}
Run Code Online (Sandbox Code Playgroud)
那么为什么这不起作用呢?我可以只是一个.ToList<tabGenre>()
,返回它,绑定它然后它会工作,但为什么IQueryable不会以同样的方式工作?我真正想要实现的是理解IQueryable可以做什么.
编辑: 我也尝试禁用延迟加载,但没有影响.
Pet*_*e M 16
您可以将IQueryable视为执行查询所需的指令.当您调用.ToList()时,您正在执行IQueryable()以返回实际数据.绑定到IQueryable()时,每当调用DataBind()时,它都会有一个数据源来获取实际数据.
当您设置gvGenre.DataSource()= Genre.GetGenres2()时,在调用DataBind()之前,基于您的IQueryable获取实际数据所需的DataContext将被销毁.
它可以调用.ToList(),因为你实际上是在外出并获取数据,然后将内存放入.
存储IQueryable就像只存储查询一样.如果预期使用的数据源不存在,则无法执行查询.