IQueryable使用后处理

And*_*eas 7 c# linq-to-sql

我有一些看起来像这样的短代码:

public static IQueryable<User> SelectFromEmployee(int employee)
{
    using (var ctx = Database.AccountingContext())
    {
        return ctx.Users.Where(c => c.Employee_FK == employee);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我只是保持这个代码,并使用结果我得到异常告诉我数据被处置.但如果我喜欢这样:

public static IEnumerable<User> SelectFromEmployee(int employee)
{
    using (var ctx = Database.AccountingContext())
    {
        return ctx.Users.Where(c => c.Employee_FK == employee).ToList();
    }
}
Run Code Online (Sandbox Code Playgroud)

一切正常.但我的问题是我想使用需要IQueryable的Linq Dynamic.有没有办法返回本地IQueryable所以我可以继续使用它?

Jin*_*ung 5

你需要选择:

  1. 不处理上下文(没有using语句)和获取IQueryable<User>,这依赖于数据库.
  2. 处理上下文并IQueryable<User>通过ToList().AsQueryable(),这依赖于内存.

请注意,重要的一点是数据是通过延迟加载的.


hat*_*ica 0

如果你想真正做到你所要求的

public static IQueryable<User> SelectFromEmployee(int employee)
{
    using (var ctx = Database.AccountingContext())
    {
        return ctx.Users.Where(c => c.Employee_FK == employee).ToList().AsQueryable();
    }
}
Run Code Online (Sandbox Code Playgroud)

但请注意,您返回的内容不再与数据上下文关联,因此,如果数据上下文尚未释放,关系导航将无法按您的预期工作。