当dbContext使用'using'块时,如何从Linq向SQL查询返回IQueryable?

pol*_*1nt 10 .net c# linq-to-sql

我一直使用'使用'块进行编码,但我想知道是否可以从以下返回IQueryable而不会在我访问它之前放置对象.

public IQueryable<Contact> GetContacts(string clientID)
{
    using (dbDataContext db = new dbDataContext())
    {
        var contacts = from _contacts in db.Contacts
                        where _contacts.ClientID == clientID
                        orderby _contacts.LastName ascending
                        select _contacts;

        return contacts;
    }
}
Run Code Online (Sandbox Code Playgroud)

我只是删除'使用'块并让.Net管理对象,或者我可以让Linq提前运行查询并返回填充的对象.

Mar*_*ell 7

如果您不希望进一步撰写数据(在db-server上),那么:

return contacts.ToList().AsQueryable();
Run Code Online (Sandbox Code Playgroud)

虽然在那种情况下我宁愿回归IEnumerable<Contact>IList<Contact>使不可组合的性质显而易见.使用这种AsQueryable方法,它仍然可组合的,但它将通过LINQ-to-Objects组成(因此从数据库中获取记录之后).

如果期望进一步构成它,那么就应该通过数据上下文(或者,如果可能的话,上游IQueryable<something>)的方法中,并让主叫处理寿命:

public IQueryable<Contact> GetContacts(dbDataContext db, string clientID)
{
    return from _contacts in db.Contacts
           where _contacts.ClientID == clientID
           orderby _contacts.LastName ascending
           select _contacts;
}
Run Code Online (Sandbox Code Playgroud)