C# 实现IAsyncEnumerable的空IQueryable
我正在寻找一个空的C# 实现IAsyncEnumerable的空IQueryable,c#,entity-framework,iqueryable,C#,Entity Framework,Iqueryable,我正在寻找一个空的IQueryable,它实现了IAsyncEnumerable。我的当前代码不工作,因为emptyEnumerable未实现IAsyncEnumerable。谢谢你的帮助或提示 我的设计如下: var result = Enumerable.Empty<Foo>().AsQueryable(); // Not working! if (condition1) { IQueryable<Foo> part1 = ....; resul
IQueryable
,它实现了IAsyncEnumerable
。我的当前代码不工作,因为emptyEnumerable
未实现IAsyncEnumerable
。谢谢你的帮助或提示
我的设计如下:
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();
var result=Enumerable.Empty().AsQueryable();//不行!
如果(条件1)
{
可计量部分1=。。。。;
结果=结果Concat(第1部分);
}
如果(条件2)
{
可计量部分2=。。。。;
结果=结果Concat(第2部分);
}
返回等待结果。toListSync();
错误消息:
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)
源IQueryable未实现IAsyncEnumerable。只有实现IAsyncEnumerable的源才能用于实体框架异步操作。
位于Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.AsAsAsAsyncEnumerable[TSource](IQueryable`1源)
位于Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToListSync[TSource](IQueryable`1源,CancellationToken CancellationToken)
您可以创建一个空的IAsyncEnumerable,如中所述
但如果我认为这不是一个理想的选择,因为它需要引用一个额外的包或自己实现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 = expressions.Aggregate((acc, i) => acc.Concat(i));
return await result.ToListAsync();
var表达式=新列表();
如果(条件1)
{
可计量部分1=。。。。;
添加(第1部分);
}
如果(条件2)
{
可计量部分2=。。。。;
添加(第2部分);
}
var结果=表达式.聚合((acc,i)=>acc.Concat(i));
返回等待结果。toListSync();
使用nuget软件包System.Linq.Async
获取ToAsyncEnumerable()
方法:
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();
}
private静态异步任务GetList()
{
var result=Enumerable.Empty().AsQueryable();
如果(真)
{
IQueryable part1=新列表{new Foo()}.AsQueryable();
结果=结果Concat(第1部分);
}
如果(真)
{
IQueryable part2=新列表{new Foo(),new Foo()}.AsQueryable();
结果=结果Concat(第2部分);
}
返回等待结果。ToAsyncEnumerable().ToListSync();
}
只是好奇,你为什么需要这个?@MichaelRandall…
我代表了从DbSet
查询。结果是IQueryable
。我正在尝试加入两个IQueryable
并等待toListSync()
<代码>结果需要实现IAsyncEnumerable
才能解决所有问题。我想也许这篇文章可以给你一些想法:@AmirPopovich我理解,但我希望有一种方法不把moq引入项目中。@AmirPopovich我添加了我收到的错误消息