我一直在使用“使用”块进行编码,但我想知道是否可以从以下返回 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;
    }
}

我是简单地删除“使用”块并让 .Net 管理对象,还是让 Linq 尽早运行查询并返回填充的对象。

最佳答案

如果您不希望进一步组合数据(在 db-server 上),则:

return contacts.ToList().AsQueryable();

尽管在这种情况下,我更愿意返回 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;
}

关于c# - 当 dbContext 具有 'using' 块时,如何将 IQueryable 从 Linq 返回到 SQL 查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3716906/

10-17 02:42