Pre*_*fet 5 c# entity-framework-core ef-core-3.0 ef-core-3.1
我是新来的,也是 asp.net 核心的新手。
我正在使用 asp.net core 3.0 编写一个 web api。我编写了以下 API 端点代码来检索Databases实体列表并按Value从另一个对象命名的字段对它们进行分组Type。
//GET:api/Databases/graph
[HttpGet("graph")]
public async Task<ActionResult<IEnumerable<IGrouping<string, Database>>>> GetGraphDatabases()
{
return await _context.Databases
.Include(t => t.Type)
.Where(d => d.Type.Code == "DATABASE_TYPE")
.GroupBy(d => d.Type.Value)
.ToListAsync();
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试到达端点时,我收到以下错误消息:InvalidOperationException:不支持客户端 GroupBy。
我检查了这个答案,但没有太大帮助。
可以请你支持。
很快,GroupByEF Core 3.0 不支持这种类型。
您应该在该操作员之前明确切换到客户评估。其中同步版本就像插入.AsEnumerable(). 对于异步版本,这并不容易 - 有AsAsyncEnumerable()方法,但是您需要额外的包来获取GroupBy和其他可用的 LINQ 运算符。
解决它的最简单方法(以内存中的一个额外列表为代价)可能是使用ToListAsync()来完成异步部分,然后使用常规 LINQ to Objects 处理其余部分。
例如这样的事情
return (await _context.Databases
.Include(t => t.Type)
.Where(d => d.Type.Code == "DATABASE_TYPE")
.ToListAsync())
.GroupBy(d => d.Type.Value);
Run Code Online (Sandbox Code Playgroud)
我正在谈论的附加包是System.Linq.Async。有关详细信息,请参阅将 EF Core 查询从 2.2 转换为 3.0 - async await。