【发布时间】:2016-01-23 04:13:52
【问题描述】:
假设我有一个简单的存储库类,有一个 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));
}
}
现在当我将它与异步 EntityFramework ToListAsync() 扩展一起使用时
var myObjects = awawit new MyRepo(_db).GetByNames(names).ToListAsync();
如果我传入空列表或 null,它会爆炸,因为 Enumerable.Empty<MyObject>().AsQueryable() 没有实现 IDbAsyncEnumerable<MyObject> 接口。
源 IQueryable 未实现 IDbAsyncEnumerable。只有实现 IDbAsyncEnumerable 的源才能用于实体框架异步操作。更多详情请见http://go.microsoft.com/fwlink/?LinkId=287068。
所以我的问题是,我怎样才能返回一个实现IDbAsyncEnumerable 的空IQueryable<>,而不访问数据库?
【问题讨论】:
-
如果参数为
null,我很想抛出异常,如果数组为空,则只调用查询。
标签: entity-framework async-await iqueryable