15

これを期待どおりに機能させるために私にできることがあるかどうか疑問に思っています。これは私のコードではうまく機能します:

        var roles = _securityContext.Set<Role>();
        var roleList = new List<RoleDto>();
        foreach (var role in roles)
        {
            roleList.Add(Mapper.Map<Role, RoleDto>(role)); 
        }

        return roleList;

しかし、これを次のように変更します。

        var roles = _securityContext.Set<Role>();

        return roles.Select(role => Mapper.Map<Role, RoleDto>(role)).ToList();

これまでに見たことのないエラーが発生します。

「LINQtoEntitiesは、メソッド'Security.Dto.RoleDto MapRole、RoleDto'メソッドを認識しません。このメソッドは、ストア式に変換できません。」

この「問題」について何かできるかどうかはわかりません...おそらく、機能する方法の方がとにかく読みやすくなっています...

4

1 に答える 1

29

を操作していますIQueryable。これは、指定したメソッドをSQLに変換しようとします。明らかに、AutoMapper関連の魔法を通過しているので、それは起こりません。簡単な解決策があります。マッピングする前に強制的に実行する必要があります。

return roles.ToList().Select(role => Mapper.Map<Role, RoleDto>(role)).ToList();

[編集]ダニエルがコメントで示唆しているように、あなたはいつでも電話をかけてからIQueryableに行くことができ、それでも実行を延期することができます:IEnumerableAsEnumerable()

return roles.AsEnumerable().Select(role => Mapper.Map<Role, RoleDto>(role)).ToList();
于 2013-02-08T10:56:03.177 に答える