comment mapper un objet anonyme à une classe par AutoMapper?
J'ai une entité:
public class Tag {
public int Id { get; set; }
public string Word { get; set; }
//other properties...
//and a collection of blogposts:
public ICollection<Post> Posts { get; set; }
}
et un modèle:
public class TagModel {
public int Id { get; set; }
public string Word { get; set; }
//other properties...
//and a collection of blogposts:
public int PostsCount { get; set; }
}
et j'ai une requête de l'entité comme ceci (par EF ou NH):
var tagsAnon = _context.Tags
.Select(t => new { Tag = t, PostsCount = t. Posts.Count() })
.ToList();
Maintenant, comment puis-je carte la tagsAnon
(comme un objet anonyme) à une collection de TagModel
(par exemple ICollection<TagModel>
ou IEnumerable<TagModel>
)? Est-il possible?
- Pourquoi ne pas la carte
Tag
directement àTagModel
? Pourquoi les objets intermédiaires?
Vous devez vous connecter pour publier un commentaire.
Mise à jour 2019-07-31:
CreateMissingTypeMaps
est maintenant obsolète dans AutoMapper v8, et sera supprimée dans la v9.Mise à jour 2016-05-11: DynamicMap est maintenant obsolète.
Maintenant, vous devez créer un mappeur à partir d'une configuration qui définit
CreateMissingTypeMaps
àtrue
:Oui, c'est possible. Vous devez utiliser le
DynamicMap<T>
méthode de la Automapper deMapper
classe pour chaque objet anonyme que vous avez. Quelque chose comme ceci:Je ne suis pas entièrement sûr si cela est possible. Suggestions:
Pourquoi tu ne peux pas le faire:
Cela DEVRAIT fonctionner, mais il ne parvient pas (j'ai lu que DynamicMap est vraiment difficile sur les collections.
Cela prouve que DynamicMap fonctionne avec anon types, tout simplement pas apparemment avec enumerables:
Vous pouvez créer une fonction personnalisée pour atteindre cette dernière Automapper. Il utilise le
CreateMissingTypeMaps
propriété comme mentionné dans d'autres réponses ci-dessus.Ensuite vous suffit d'appeler la fonction avec cette seule ligne de code:
où
model
est leIEnumerable<object>
ouList<object>
.