实现IAsyncEnumerable的空IQueryable

问题描述 投票:2回答:1

我正在寻找实现IQueryable<T>的空IAsyncEnumerable<T>。我的当前代码不起作用,因为空Enumerable无法实现IAsyncEnumerable<T>。感谢您的帮助或提示。

我有以下设计:

var result = Enumerable.Empty<Foo>().AsQueryable();  // Not working!

if (condition1)
{
    IQueryable<Foo> part1 = ....;

    result = result.Concat(part1);
}

if (condition2)
{
    IQueryable<Foo> part2 = ....;

    result = result.Concat(part2);
}

return await result.ToListAsync();

错误消息:

The source IQueryable doesn't implement IAsyncEnumerable<Foo>. Only sources that implement IAsyncEnumerable can be used for Entity Framework asynchronous operations.
   at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.AsAsyncEnumerable[TSource](IQueryable`1 source)
   at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToListAsync[TSource](IQueryable`1 source, CancellationToken cancellationToken)
c# entity-framework iqueryable
1个回答
0
投票

您可以创建一个空的IAsyncEnumerable,如this SO中所述。

但是如果我认为这不是理想的选择,因为它需要引用其他程序包或自行实现AsyncEnumerable.Empty。

或者,您可以以不需要“空”容器的方式来更改代码。

例如:

var expressions = new List<IQueryable<Foo>>();

if (condition1)
{
    IQueryable<Foo> part1 = ....;

    expressions.Add(part1);
}

if (condition2)
{
    IQueryable<Foo> part2 = ....;

    expressions.Add(part2);
}

var result = items.Aggregate((acc, i) => acc.Concat(i));

return await result.ToListAsync();
© www.soinside.com 2019 - 2024. All rights reserved.