Le code ci-dessous fonctionne correctement sur EF Core 2.2 mais ne fonctionne pas sur EF core 3.0
var items = (from asset in Context.Assets
join assetCategory in Context.AssetCategories on asset.CategoryId equals assetCategory.Id
group assetCategory by assetCategory.Id into assetCategories
select new AssetCategorySummary
{
CategoryId = assetCategories.Key,
CategoryName = assetCategories.Select(p => p.CategoryName).FirstOrDefault(),
TotalAsset = assetCategories.Count()
}).ToListAsync();
l'erreur que j'obtiens:
Le traitement de l'expression LINQ 'AsQueryable (Select (source: NavigationTreeExpression Value: default (IGrouping) Expression: (paramètre non géré: e), sélecteur: (p) => p.CategoryName))' 'par' NavigationExpandingExpressionVisitor 'a échoué. Cela peut indiquer un bogue ou une limitation dans EF Core. Voir https://go.Microsoft.com/fwlink/?linkid=21014 pour des informations plus détaillées.
besoin d'aide s'il vous plaît
Modifier: l'a résolu comme ci-dessous
var items = Context.Assets.AsEnumerable().GroupBy(p => p.CategoryName).Select(p => new AssetCategorySummary
{
CategoryId = p.Select(r => r.CategoryId).FirstOrDefault(),
CategoryName = p.Select(r => r.CategoryName).FirstOrDefault(),
TotalAsset = p.Count()
}).ToList();
mais je pense que ce n'est pas efficace.
vous pouvez toujours effectuer n'importe quel type d'opération d'ensemble sur le client via l'évaluation du client, insérez simplement une AsEnumerable()
avant d'effectuer votre opération d'ensemble. C'est ainsi que toutes les opérations d'ensemble ont été gérées dans les versions antérieures à 3.0, et selon le cas d'utilisation exact, l'évaluation du client peut être aussi efficace que l'évaluation du serveur.