首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >实现IAsyncEnumerable的空IQueryable

实现IAsyncEnumerable的空IQueryable
EN

Stack Overflow用户
提问于 2020-02-18 14:09:50
回答 2查看 2.7K关注 0票数 3

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

我有以下设计:

代码语言:javascript
运行
复制
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();

错误消息:

代码语言:javascript
运行
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-18 17:18:08

使用nuget包System.Linq.Async获取ToAsyncEnumerable()方法:

代码语言:javascript
运行
复制
private static async Task<List<Foo>> GetList()
{
    var result = Enumerable.Empty<Foo>().AsQueryable();

    if (true)
    {
        IQueryable<Foo> part1 = new List<Foo> { new Foo() }.AsQueryable();
        result = result.Concat(part1);
    }

    if (true)
    {
        IQueryable<Foo> part2 = new List<Foo> { new Foo(), new Foo() }.AsQueryable();
        result = result.Concat(part2);
    }

    return await result.ToAsyncEnumerable().ToListAsync();
}
票数 3
EN

Stack Overflow用户

发布于 2020-02-18 17:00:12

您可以按照this SO中的说明创建一个空的IAsyncEnumerable。

但如果我不认为这是一个理想的选择,因为它需要引用额外的包或自己实现AsyncEnumerable.Empty。

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

例如:

代码语言:javascript
运行
复制
var expressions = new List<IQueryable<Foo>>();

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

    expressions.Add(part1);
}

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

    expressions.Add(part2);
}

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

return await result.ToListAsync();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60274758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档