小编gai*_*zov的帖子

如何在异步存储库方法中返回空IQueryable

假设我有一个简单的存储库类,有一个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

entity-framework iqueryable async-await

7
推荐指数
2
解决办法
2563
查看次数

标签 统计

async-await ×1

entity-framework ×1

iqueryable ×1