2017-03-11 3 views
1

Lors de la tentative de mappage d'une entité à un objet DTO, j'obtiens l'erreur suivante.La méthode d'extension & LINQ to Entities ne reconnaît pas l'erreur de méthode

LINQ to Entities ne reconnaît pas la méthode 'Dto.Team ToTeamDto (équipe, System.String)' méthode, et cette méthode ne peut pas être traduit en une expression de magasin. »

ici est la requête

bool includeTeam = true; 

var source = from c in db.Standings 
         where c.LeagueID == leagueId 
         select new Standing 
         { 
          id = c.StandingsId, 
          team = includeTeam ? c.Team.ToTeamDto("en-US") : null 
         }; 

et la méthode d'extension

Quel est le problème avec celui-ci? Comment puis-je le réparer?

Répondre

2

Le problème est que EF ne peut pas traduire votre fonction en SQL. La solution la plus simple consiste à matérialiser les données avec ToList, puis utilisez votre fonction:

var source = db.Standings 
      .Where(c => c.LeagueID == leagueId) 
      .ToList() 
      .Select(c => new Standing 
      { 
       id = c.id, 
       team = includeTeam ? c.Team.ToTeamDto("en-US") : null, 
       //other properties here 
      }); 
+0

Il doit y avoir une solution de contournement plus facile que cela? Je veux dire que la classe Standing a plus de 30 propriétés, exclues de l'exemple ci-dessus pour plus de simplicité. – OrElse

+0

Vous ne pouvez pas passer la méthode 'ToTeamDto' dans une requête EF. Vous pouvez intégrer ce code dans la requête. – DavidG

+1

Je l'ai simplifié un peu – DavidG