À l'aide de AutoMapper à la Carte d'un DataTable à un Objet (DTO)
Je suis en train de mapper un DataTable à un objet (DTO) à l'aide de AutoMappers DynamicMap fonctionnalité.
DataTable dt;
dt = new dalAllInvestors().InvestorNameSearch(investorNameSearch);
//Look at DynamicMap - Urgent
List<dtoAPISimpleInvestor> apiObject = AutoMapper.Mapper.DynamicMap<IDataReader, List<dtoAPISimpleInvestor>>(
dt.CreateDataReader());
return apiObject;
public class dtoAPISimpleInvestor
{
public int FirmID { get; set; }
public string FirmName { get; set; }
public string Type { get; set; }
public string Location { get; set; }
}
dt
renvoie 10 lignes, mais quand vous regardez la apiObject il ne retourne aucune ligne et cela ne semble pas faire sens. J'ai été en regardant ce pour un certain temps maintenant, et après une recherche sur google on dirait que je le fais correctement.
Les bonnes colonnes sont dans le dt lors de son retour de la carte à la dtoAPISimpleInvestor
Quelqu'un peut-il m'aider?
OriginalL'auteur DJB | 2016-02-15
Vous devez vous connecter pour publier un commentaire.
Comment au sujet de quelque chose comme ce qui suit...
AutoMapper Profil
NOTE : je suis en utilisant le
DataRow
type de la source et de ne pasIDataReader
(plus sur ce ci-dessous).À l'aide du Profil
La
result
objet doit contenir le nombre correct dedtoAPISimpleInvestor
objets avec les données correctes.NOTE : L'appel à
mapper.Map
prend un objet de typeList<DataRow>
qui peut être obtenu à partir de laDataTable
objet à l'aide de la déclarationnew List<DataRow>(dataTable.Rows.OfType<DataRow>());
(depuis leRows
propriété de laDataTable
objet est une collection qui met en œuvreIEnumerable
mais pasIEnumerable<T>
).Ce n'est probablement pas la seulement solution mais j'ai validé que cela fonctionne.
Comme une note de côté, j'ai remarqué que
DynamicMap
méthode que vous avez référencé a été marqué comme obsolète dans la dernière version de la bibliothèque de sorte que vous pouvez éviter de l'utiliser.Je reçois Argument 1: impossible de convertir de 'Système.Les données.DataRowCollection' à 'Système.Les Collections.Génériques.Liste<DataRow>
ok, cela a fonctionné à l'aide de résultat = mappeur.Map<Liste<DataRow>,<dtoAPISimpleInvestor>>(yourdatatable.AsEnumerable().ToList());
Ajouter une référence à
System.Data.DataTableExtensions
pour.AsEnumberable()
, sourceOriginalL'auteur Jason Richmeier
Cela a fonctionné pour moi:
La Version de automapper est 3.1.1 télécharger à partir de pépite
Appel de méthode comme ceci:
OriginalL'auteur Xtian11