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