2017-03-11 10 views
1

エンティティをDTOにマップしようとすると、次のエラーが発生します。エンティティへエンティティへの拡張メソッドとLINQがメソッドエラーを認識しません

LINQは方法を認識しない 'Dto.Team ToTeamDto(チーム、可能System.String)' メソッド、およびこの方法 は、ストア式に変換することができません。」

ここ

クエリ

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 
         }; 

と拡張メソッドがある

 internal static Dto.Team ToTeamDto(this Team team, string locale) 
     { 
      return new Dto.Team 
      { 
       id = team.TeamID, 
       name = team.name 
      }; 
     } 

これは何が問題ですか? どうすれば修正できますか?

答えて

2

問題は、EFが関数をSQLに変換できないことです。最も簡単な解決策は、ToListでデータを具体化し、次に関数を使用することです。

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

これより簡単な回避策が必要ですか?つまり、Standingクラスには30個以上のプロパティがあり、簡単のために上記の例から除外されています。 – OrElse

+0

ToTeamDtoメソッドをEFクエリに渡すことはできません。そのコードをクエリに埋め込むことができます。 – DavidG

+1

少し簡略化しました – DavidG

関連する問題