C# AutoMapper Conditionnelle de Cartographie basé sur la valeur de la cible
Veuillez peut-on conseiller sur la façon d'utiliser conditionnelle de la cartographie dans AutoMapper à la carte d'une valeur dans l'objet CIBLE à partir d'une SOURCE d'objet basé sur une CIBLE existante valeur de la propriété?
Donc ma source de la classe est:
public class UserDetails
{
public String Nickname { get; set; }
}
Ma classe cible est:
public class ProfileViewModel
{
public Boolean NicknameIsVisible { get; set;
public String Nickname { get; set; }
}
Je veux mettre le "Surnom" la valeur de la propriété dans l'OBJECTIF de faire correspondre le "Surnom" la valeur de la propriété de la SOURCE uniquement si la cible de la propriété "NicknameIsVisible" la valeur est déjà défini à TRUE, sinon je veux définir la CIBLE "Surnom" la valeur de la propriété à une chaîne vide.
J'ai essayé quelque chose comme ceci (qui a l'habitude de compiler )...
Mapper.CreateMap<UserDetails, ProfileViewModel>()
.ForMember(
destination => destination.Nickname,
option => option.
.MapFrom(
source => source.NicknameIsVisible ?
source.Nickname :
String.Empty)
);
mais "NicknameIsVisible" n'est pas une propriété de ma SOURCE, mais de ma CIBLE.
BTW, Mon ProfileViewModel est lié à trois entités à l'aide de Owain Wragg de la méthode (http://consultingblogs.emc.com/owainwragg/archive/2010/12/22/automapper-mapping-from-multiple-objects.aspx) et c'est une autre entité qui donne de la valeur à la "NicknameIsVisible de la propriété".
Svp quelqu'un peut-il suggérer la bonne syntaxe à utiliser pour ce problème?
OriginalL'auteur Dib | 2014-06-23
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
J'obtiens des erreurs de compilation avec votre exemple. J'ai changé en dessous de ma version ci-dessous pour obtenir le code à compiler:
OriginalL'auteur devduder
À l'aide de devduder l'exemple, j'ai maintenant le code suivant, qui est une compilation:
Cependant, bien qu'il compile et s'exécute à travers elle n'est pas du remplissage de la destination.Surnom avec quoi que ce soit.Edit: j'ai dû changer l'ordre de mes cartographie ainsi que les préférences de l'objet (qui a les valeurs pour le "NicknameIsVisible" la propriété a été cartographié d'abord si la valeur est disponible à tester!)
Donc, l'appel de mes trois cartographie a été:
Cela a permis à la préférences objet a été cartographié sur le ViewModel d'abord, puis de la condition de la cartographie pour la compte objet pourrait avoir lieu une fois que les valeurs ont été définies.
Donc, c'est ma solution, mais je ne peux pas-vote ma propre réponse!
Laissez-nous savoir comment vous allez, je serais intéressé de savoir ce que vous trouvez.
Ok, va faire. J'espère que je vais arriver à travailler sur elle ce soir.
J'ai changé l'ordre de la cartographie se passe si la condition dans mon code ci-dessus a été remplies avant que la condition a été testé pour. Donc, en substance, le code qui a fonctionné pour moi est le code ici. Mais un énorme merci à @devduder dont suggéré code m'a mis sur la bonne voie pour ma solution en premier lieu.
OriginalL'auteur Dib