2013-06-12 61 views
3

這裏是我的數據傳輸對象傳遞DTO,將視圖模型

public class LoadSourceDetail 
{ 
    public string LoadSourceCode { get; set; } 
    public string LoadSourceDesc { get; set; } 
    public IEnumerable<ReportingEntityDetail> ReportingEntity { get; set; } 
} 

public class ReportingEntityDetail 
{ 
    public string ReportingEntityCode { get; set; } 
    public string ReportingEntityDesc { get; set; } 
} 

這裏是我的ViewModel

​​

}

我不知道如何將數據從LoadSourceDetail轉移ReportingEntity到LoadSourceViewModel ReportingEntity。我試圖從一個IEnumerable傳輸數據到另一個IEnumerable。

回答

1

沒有AutoMapper你將不得不逐個映射每個屬性,

事情是這樣的:

LoadSourceDetail obj = FillLoadSourceDetail();// fill from source or somewhere 

    // check for null before 
    ReportingEntity = obj.ReportingEntity 
        .Select(x => new ReportingEntityViewModel() 
         { 
          ReportingEntityCode = x.ReportingEntityCode, 
          ReportingEntityDesc x.ReportingEntityDesc 
         }) 
        .ToList(); // here is 'x' is of type ReportingEntityDetail 
6

我會用AutoMapper要做到這一點:

https://github.com/AutoMapper/AutoMapper

http://automapper.org/

您可以輕鬆地映射集合,看到https://github.com/AutoMapper/AutoMapper/wiki/Lists-and-arrays

這將是這個樣子:

var viewLoadSources = Mapper.Map<IEnumerable<LoadSourceDetail>, IEnumerable<LoadSourceViewModel>>(loadSources); 

如果您在MVC項目中使用這個我通常在App_Start的AutoMapper配置,設置配置即字段不匹配等

+0

我用automapper爲我所有的映射和​​的ViewModels –

+0

感謝您的建議,但我'想知道如何在沒有AutoMapper的情況下手動執行此操作。 –

+0

沒問題,對我來說這將是一個帶有To()和From()方法的老式DTO。我會在那裏留下我的答案,因爲這是我現在要做的方式。 – hutchonoid

0

你可以將它指向同一IEnumerable

ReportingEntity = data.ReportingEntity; 

如果你想使一個深拷貝,你可以使用ToList(),或ToArray()

ReportingEntity = data.ReportingEntity.ToList(); 

這將兌現的IEnumerable並存儲在您的視圖模型的快照。

+0

我得到一個錯誤「無法隱式轉換類型‘System.Collections.Generic.IEnumerable ’到「System.Collections.Generic.IEnumerable 」。一個顯式轉換存在(是否缺少強制轉換?)」 –