簡體   English   中英

自動映射器將對象映射到具有第一個對象的嵌套列表的對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM