У меня есть DataTable с этими данными:
![enter image description here](https://i.stack.imgur.com/qJENB.png)
Затем у меня есть эти два класса: *
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public IEnumerable<Consent> ConsentList { get; set; }
}
public class Consent
{
public string Type { get; set; }
public string Origin { get; set; }
public DateTime? Date { get; set; }
public bool? ConsentValue { get; set; }
}
Кроме того, у меня есть это отображение
CreateMap<DataRow, User>()
.ForMember(dest => dest.Id, orig => orig.MapFrom(row => (int)row["Id"]))
.ForMember(dest => dest.Name, orig => orig.MapFrom(row => row["Name"].ToString()))
.ForMember(dest => dest.Surname, orig => orig.MapFrom(row => row["Surname"].ToString()))
.ForMember(dest => dest.ConsentList, orig => orig.MapFrom<DataRowToHistoryDataResolver>());
public class DataRowToHistoryDataResolver : IValueResolver<DataRow, User, IEnumerable<Consent>>
{
public IEnumerable<Consent> Resolve(DataRow source, User destination, IEnumerable<Consent> destMember, ResolutionContext context)
{
var consentDataList = new List<Consent>();
var consentData = new Consent();
var consentName = source["Type"].ToString();
consentData.Type = consentName.First().ToString().ToUpper() + consentName.Substring(1).ToLower();
consentData.ConsentValue = (bool)source["Consent"];
consentData.Origin = source["Origin"].ToString();
consentData.Date = null;
var dtDate = new DateTime();
if (DateTime.TryParse(source["Date"].ToString(), out dtDate))
consentData.Date = dtDate;
consentDataList.Add(consentData);
return consentDataList;
}
}
// **userDT is the DataTable filled**
var rows = new List<DataRow>(userDT.Rows.OfType<DataRow>());
var userDataList = mapper.Map<List<DataRow>, List<UserData>>(rows);
Результатом этого отображения является список пользователей с одним элементом в ConsentList для каждого объекта и с дублирующимися пользователями, как в DataTable. Например:
ID=6, Name=Name1, Surname=Surname1, ConsentList {
(Type=marketing, Origin=Origin1, Date=2020-04-16, Consent=0)
},
ID=6, Name=Name1, Surname=Surname1, ConsentList {
(Type=newsletter, Origin=Origin1, Date=2020-04-16, Consent=1)
},
ID=6, Name=Name1, Surname=Surname1, ConsentList {
(Type=policy, Origin=Origin3, Date=2020-03-20, Consent=1)
},
....,
ID=7, Name=Name2, Surname=Surname2, ConsentList {
(Type=marketing, Origin=Origin1, Date=2020-04-21, Consent=0)
}
ID=7, Name=Name2, Surname=Surname2, ConsentList {
(Type=marketing, Origin=Origin2, Date=2020-03-24, Consent=1)
}
ID=7, Name=Name2, Surname=Surname2, ConsentList {
(Type=newsletter, Origin=Origin1, Date=2020-04-21, Consent=0)
},
....
То, что я хочу, это список пользователей с объектом для каждого дублирующегося пользовательского данных (идентификатор, имя и фамилия) в DataTable и с ConsentList, заполненным всеми данными доступных строк ( тип, происхождение, дата и согласие). Например:
ID=6, Name=Name1, Surname=Surname1, ConsentList {
(Type=marketing, Origin=Origin1, Date=2020-04-16, Consent=0),
(Type=newsletter, Origin=Origin1, Date=2020-04-16, Consent=1),
(Type=policy, Origin=Origin3, Date=2020-03-20, Consent=1),
....
},
ID=7, Name=Name2, Surname=Surname2, ConsentList {
(Type=marketing, Origin=Origin1, Date=2020-04-21, Consent=0),
(Type=marketing, Origin=Origin2, Date=2020-03-24, Consent=1),
(Type=newsletter, Origin=Origin1, Date=2020-04-21, Consent=0),
....
},
....
Кто-нибудь может подсказать, как получить этот результат с помощью AutoMapper?
Спасибо!