C# 将IQueryable转换为实现IAsyncEnumerable

C# 将IQueryable转换为实现IAsyncEnumerable,c#,unit-testing,entity-framework-core,moq,iasyncenumerable,C#,Unit Testing,Entity Framework Core,Moq,Iasyncenumerable,我在方法中有一个查询: private readonly IEntityReader<Customer> _reader; public async Task<IEnumerable<Customer>> HandleAsync(GetCustomer query) { var result = _reader.Query() .Include(customer => customer.Organization)

我在方法中有一个查询:

private readonly IEntityReader<Customer> _reader;

public async Task<IEnumerable<Customer>> HandleAsync(GetCustomer query)
{
    var result = _reader.Query()
        .Include(customer => customer.Organization)
        .Where(customer => customer.Name == query.Name);

    return await result.ToListAsync();
}

感谢@Nkosi,这就是解决方案:

的代码段随客户列表的更改而更改:

var customers = new TestAsyncEnumerable<Customer>(new List<Customer>
{
    new Customer
    {
        Id = new Guid("d4e749ba-6874-40f4-9134-6c9cc1bc95fe"),
        Name = "John Doe",
        Age = 18,
        Organization = new Organization
        {
            Id = new Guid("b2ba06c9-5c00-4634-b6f7-80167ea8c3f1"),
            Name = "TheCompany",
            Number = 42
        }
    },
    new Customer
    {
        Id = new Guid("0679ceb5-3d4f-41f3-a1b0-b167e1ac6d7e"),
        Name = "Another Guy",
        Age = 39,
        Organization = new Organization
        {
            Id = new Guid("b2ba06c9-5c00-4634-b6f7-80167ea8c3f1"),
            Name = "TheCompany",
            Number = 42
        }
    }
}.AsQueryable();
var客户=新测试可枚举(新列表
{
新客户
{
Id=新Guid(“d4e749ba-6874-40f4-9134-6c9cc1bc95fe”),
Name=“John Doe”,
年龄=18岁,
组织=新组织
{
Id=新Guid(“b2ba06c9-5c00-4634-b6f7-80167ea8c3f1”),
Name=“公司”,
数字=42
}
},
新客户
{
Id=新Guid(“0679ceb5-3d4f-41f3-a1b0-b167e1ac6d7e”),
Name=“另一个人”,
年龄=39岁,
组织=新组织
{
Id=新Guid(“b2ba06c9-5c00-4634-b6f7-80167ea8c3f1”),
Name=“公司”,
数字=42
}
}
}.AsQueryable();

看看这里解决方案可以被修改并应用到您的用例中似乎代码正在处理
DbSet
,但我要看看。是的,它是这样的,它也是iQuery类型。可以应用相同的策略。或者您可以研究ef源代码内部使用的AsAsAsAsyncEnumerable扩展方法。不同的原因是他们直接在
DbContext/DbSet
上进行测试,我在模拟一个接口,该接口有一个返回
IQuerable
@Nkosi的方法。如果你是对的,我想出了一个解决方案。:-)等等,我会发布答案。
public interface IEntityReader<out TEntity> where TEntity : Entity
{
    IQueryable<TEntity> Query();
}
var customers = new TestAsyncEnumerable<Customer>(new List<Customer>
{
    new Customer
    {
        Id = new Guid("d4e749ba-6874-40f4-9134-6c9cc1bc95fe"),
        Name = "John Doe",
        Age = 18,
        Organization = new Organization
        {
            Id = new Guid("b2ba06c9-5c00-4634-b6f7-80167ea8c3f1"),
            Name = "TheCompany",
            Number = 42
        }
    },
    new Customer
    {
        Id = new Guid("0679ceb5-3d4f-41f3-a1b0-b167e1ac6d7e"),
        Name = "Another Guy",
        Age = 39,
        Organization = new Organization
        {
            Id = new Guid("b2ba06c9-5c00-4634-b6f7-80167ea8c3f1"),
            Name = "TheCompany",
            Number = 42
        }
    }
}.AsQueryable();