web-dev-qa-db-fra.com

La requête EF Core 2.2 LINQ ne fonctionne pas dans EF Core 3.0

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.

16
S. Aziz Kazdal

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.

0
Libertad