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提前运行查询并返回填充的对象.
如果您不希望进一步撰写数据(在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)
| 归档时间: |
|
| 查看次数: |
7576 次 |
| 最近记录: |