[英]Automapper map object to object with nested list from first object
我正在上課:
public class Kempe
{
public string Name {get; set;}
public DateTime DateTaken {get; set;}
public decimal Score {get; set;}
}
我想使用自動映射器將其映射到:
public class KempeCollector
{
public string Name {get; set;}
public List<KempeList> Collection {get; set;}
}
public class KempeList
{
public DateTime DateTaken {get; set;}
public decimal Score {get; set;}
}
我該如何映射? 我需要自定義解析器嗎?
假設您將擁有需要映射到KempeCollector的Kempe對象列表,則可以使用以下方法進行操作:
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Kempe, KempeList>();
cfg.CreateMap<List<Kempe>, KempeCollector>().ConvertUsing((kempeList, kempeCollector) =>
{
kempeCollector = new KempeCollector
{
Name = kempeList[0].Name,
Collection = new List<KempeList>()
};
foreach (var kempe in kempeList)
{
kempeCollector.Collection.Add(Mapper.Map<KempeList>(kempe));
}
return kempeCollector;
});
});
運行樣本:
List<Kempe> kList = new List<Kempe>()
{
new Kempe{ Name = "1000", DateTaken = DateTime.Today, Score = 1 },
new Kempe{ Name = "1000", DateTaken = DateTime.Today, Score = 2 }
}
var kColl = Mapper.Map<KempeCollector>(kList);
一切都是關於該映射的手動操作,在我看來,這比linq查詢(您可以通過編寫函數來重用)更糟糕。 但是,如果您想使用AM,至少應嘗試利用其功能。
static void Main()
{
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Kempe, KempeList>();
cfg.CreateMap<List<Kempe>, KempeCollector>()
.ForMember(d=>d.Collection, o=>o.MapFrom(s=>s));
});
Mapper.AssertConfigurationIsValid();
var kList = new List<Kempe>{new Kempe{ Name = "1000", DateTaken = DateTime.Today, Score = 1 }, new Kempe{ Name = "3000", DateTaken = DateTime.Today.AddDays(2), Score = 2 }};
var kColl = Mapper.Map<KempeCollector>(kList).Dump();
}
public class Kempe
{
public string Name {get; set;}
public DateTime DateTaken {get; set;}
public decimal Score {get; set;}
}
public class KempeCollector
{
public string FirstName {get; set;}
public List<KempeList> Collection {get; set;}
}
public class KempeList
{
public DateTime DateTaken {get; set;}
public decimal Score {get; set;}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.