我有一個專案串列“listItems”,像這樣
Id Code Value
1 'a' '1'
2 'a' '2'
3 'b' 'x'
4 'b' 'y'
并獲得以下
'a' => '1', '2'
'b' => 'x', 'y'
我使用 EF Core 的以下代碼
public async Task<Dictionary<string, List<string>>> GetAllListsAsync() =>
await _context.ListItems
.GroupBy(x => x.Code)
.OrderBy(x => x.Key)
.ToDictionaryAsync(x => x.Key, x => x.Select(y => y.Value)
.OrderBy(v => v)
.ToList());
我在 Swagger 的 API 中獲得以下錯誤:
System.InvalidOperationException:無法翻譯給定的“GroupBy”模式。在“GroupBy”之前呼叫“AsEnumerable”以在客戶端對其進行評估。在 Microsoft.EntityFrameworkCore.Query.RelationalShapedQueryCompilingExpressionVisitor.ShaperProcessingExpressionVisitor.ProcessShaper(Expression shaperExpression, RelationalCommandCache&relationalCommandCache, LambdaExpression&relatedDataLoaders) 在 Microsoft.EntityFrameworkCore.Query.RelationalShaper 的 Microsoft.EntityFrameworkCore.Query.RelationalShapedQueryCompilingExpressionVisitor.ShaperProcessingExpressionVisitor.VisitExtension(Expression extensionExpression)形查詢運算式)
我試圖做的事情:
如果我在 GroupBy 之前使用 AsEnumerable,它將不再找到 ToDictionaryAsync:

我測驗
AsQueryable了AsEnumlerable在編譯錯誤訊息在編譯時消失后添加,但在運行時保持不變(無法翻譯'GroupBy'模式。在...之前呼叫'AsEnumerable')我也試過這個
public async Task<Dictionary<string, List<string>>> GetAllListsAsync() => await _context.ListItems .ToLookup(x => x.Code, x => x.Value) .AsQueryable() .ToDictionaryAsync(x => x.Key, x => x.Select(y => y) .ToList());
在這種情況下,運行時說:
源 'IQueryable' 沒有
2[System.String,System.String]>'. Only sources that implement 'IAsyncEnumerable' can be used for Entity Framework asynchronous operations. at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.AsAsyncEnumerable[TSource](IQueryable在 Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToDictionaryAsync[TSource,TKey,TElement](IQueryable1 source, Func2 keySelector,Func2 elementSelector, IEqualityComparer1 比較器,CancellationToken 取消令牌)處實作 'IAsyncEnumerable<System.Linq.IGrouping 1 源)
uj5u.com熱心網友回復:
由于您加載所有記錄,因此您必須在客戶端進行分組。請注意,在物化物件之后,您不能使用異步可查詢擴展。
public async Task<Dictionary<string, List<string>>> GetAllListsAsync() =>
(await _context.ListItems.ToListAsync())
.GroupBy(x => x.Code)
.OrderBy(x => x.Key)
.ToDictionary(x => x.Key, x => x.Select(y => y.Value)
.OrderBy(v => v)
.ToList());
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/406521.html
標籤:
上一篇:C#如何區分不同的委托簽名?
