假设我有一个简单的存储库类,有一个GetByNames方法
public class MyRepo
{
private readonly MyDbContext _db;
public MyRepo(MyDbContext db)
{
_db = db;
}
public IQueryable<MyObject> GetByNames(IList<string> names)
{
if (names== null || !names.Any())
{
return Enumerable.Empty<MyObject>().AsQueryable();
}
return _db.MyObjects.Where(a => names.Contains(a.Name));
}
}
Run Code Online (Sandbox Code Playgroud)
现在当我使用异步EntityFramework ToListAsync()扩展时
var myObjects = awawit new MyRepo(_db).GetByNames(names).ToListAsync();
Run Code Online (Sandbox Code Playgroud)
如果我传入空列表或null,它会爆炸,因为Enumerable.Empty<MyObject>().AsQueryable()没有实现IDbAsyncEnumerable<MyObject>接口.
源IQueryable未实现IDbAsyncEnumerable.只有实现IDbAsyncEnumerable的源才能用于Entity Framework异步操作.有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=287068.
所以我的问题是,如何在没有访问数据库的情况下返回一个IQueryable<>实现的空IDbAsyncEnumerable?