IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linq Discussion :

Expression fonctionne plus de EF .NET à EF Core


Sujet :

Linq

  1. #1
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    mai 2013
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2013
    Messages : 190
    Points : 113
    Points
    113
    Par défaut Expression fonctionne plus de EF .NET à EF Core
    Bonjour! Toute aide serait la bienvenue

    Voici le code qui pose problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    listeOrdonnee = await db
                            .DocumentDefinitif
                            .Where(d => d.SocieteFrontaleId == __societeFrontaleId
                                     && d.DateEffet >= __dateDebutPeriode
                                     && d.FlagComptable)
                            .GroupBy(d => new { d.DateEffet.Year, d.DateEffet.Month })
                            .OrderBy(x => x.Key)
                            .Select(g => new EvolutionCA
                            {
                                Year = g.Key.Year,
                                Month = g.Key.Month,
                                CA = g.Sum(d => d.CaMainOeuvre + d.CaMarchandise),
                                MargeMa = g.Sum(d => d.MontantMarge),
                                MargeTotale = g.Sum(d => d.MontantMarge + d.CaMainOeuvre),
                            })
                            .ToListAsync();
    cette req fonctionnait sur EF .NET, nous sommes passés à Core et maintenant j'ai cette erreur:

    The LINQ expression 'DbSet<DocumentDefinitif>()
    .Where(d => d.SocieteFrontaleId == ____societeFrontaleId_0 && d.DateEffet >= __p_1 && d.FlagComptable)
    .GroupBy(
    keySelector: d => new {
    Year = d.DateEffet.Year,
    Month = d.DateEffet.Month
    },
    elementSelector: d => d)
    .OrderBy(e => e.Key)' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to 'AsEnumerable', 'AsAsyncEnumerable', 'ToList', or 'ToListAsync'.

  2. #2
    Membre expert
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    mars 2005
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2005
    Messages : 1 864
    Points : 3 487
    Points
    3 487
    Par défaut
    Pendant un moment, EF Core ne gérait pas la traduction en SQL du Group By, cela était fait en mémoire.
    https://docs.microsoft.com/en-us/ef/...by-translation

    Ceci n'est qu'une hypothèse mais il est possible que EF Core ne sache pas encore traduire les appels à .Year et .Mounth.

    Est-ce que la forme suivante fonctionne ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    listeOrdonnee = await db
                            .DocumentDefinitif
                            .Where(d => d.SocieteFrontaleId == __societeFrontaleId
                                     && d.DateEffet >= __dateDebutPeriode
                                     && d.FlagComptable)
                            .GroupBy(d =>
            {
                   return String.Format("{0}{1}", d.DateEffet.Year, d.DateEffet.Month);
            }))
                            .OrderBy(x => x.Key)
                            .Select(g => new EvolutionCA
                            {
                                Year = g.Key.Year,
                                Month = g.Key.Month,
                                CA = g.Sum(d => d.CaMainOeuvre + d.CaMarchandise),
                                MargeMa = g.Sum(d => d.MontantMarge),
                                MargeTotale = g.Sum(d => d.MontantMarge + d.CaMainOeuvre),
                            })
                            .ToListAsync();
    Edit : Change date par DateEffet

  3. #3
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    mai 2013
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2013
    Messages : 190
    Points : 113
    Points
    113
    Par défaut
    Salut Popo merci pour ton confirmation, j'avais en effet résolu la chose en mentionnant explicitement les Year et Month :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .OrderBy(x => x.Key.Year).ThenBy(x => x.Key.Month)
    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [IIS] Site ASP.Net ne fonctionne plus ERROR 404
    Par SoaB dans le forum ASP.NET
    Réponses: 4
    Dernier message: 07/02/2008, 16h40
  2. [IIS] Site ASP.Net ne fonctionne plus ERROR 404
    Par SoaB dans le forum Framework .NET
    Réponses: 0
    Dernier message: 05/02/2008, 09h53
  3. Réponses: 11
    Dernier message: 03/10/2007, 11h45
  4. [.NET 2.0] Validators ne fonctionnent plus
    Par bizet dans le forum ASP.NET
    Réponses: 2
    Dernier message: 17/09/2007, 15h51
  5. [C#][Visual C# 2005 Express] GetKeyState ne fonctionne plus
    Par vincent.e dans le forum EDI/Outils
    Réponses: 3
    Dernier message: 20/11/2005, 11h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo