2016-04-08 17 views
0

Aşağıdaki değerleri gerçek bir DateTime nesnesine dönüştürmek için automapper'ı kullanmaya çalışıyorum. Çalışmayı başaramıyorum, yanlış yaptığım bir şey var mı? Herhangi bir yardım çok Örnek kadarBir numarayı bir DateTime nesnesine dönüştürmek için automapper kullanarak

_mapperConfiguration = new MapperConfiguration(c => { 
      c.CreateMap<DataObject, DomainObject>() 
       .ForMember(dest => dest.DateTime, opt => opt.MapFrom(src => new DateTime(dest.SubString(0,4), dest.SubString(5,2), 1); 
     }); 
AutoMapper ile

201503 
201504 
201505 

class DataObject 
{ 
    public int DateTime { get; set; } 
} 

class DomainObject 
{ 
    public DateTime DateTime { get; set; } 
} 
aşağıda Nesneler

girişimleri değerleri

takdir

Derleyici hata

compiler error actually, I get the following Severity Code Description Project File Line Suppression State Error CS0103 The name 'dest' does not exist in the current context.. 

İkinci girişimi

.ForMember(dest => dest.DateTime, opt => opt.MapFrom(src => new DateTime(src.Date.ToString().SubString(0, 4), src.Date.ToString().SubString(5, 2), 1))); 

Üçüncü girişimi

.ForMember(dest => dest.DateTime, opt => opt.MapFrom(src => new DateTime(Convert.ToInt32(src.Date.ToString().Substring(0, 4)), Convert.ToInt32(src.Date.ToString().Substring(5, 2)), 1))); 

Çözüm

Maalesef çalışmakta olan automapper kodu kapanmak için aşağıda gösterilse de, asıl sorun olan kötü veri alıyordum. senin automapper .ForMember Görüşmede

.ForMember(dest => dest.DateTime, dest => dest.MapFrom(src => DateTime.ParseExact(src.DateTime.ToString(), "yyyyMM", CultureInfo.InvariantCulture))); 
+0

İkinci girişim daha iyi görünüyor - bunun nasıl başarısız olduğunu açıklayabilir misiniz? – Rawling

+0

teşekkürler! - Derler ama bir çalışma zamanı hatası alırım İndeks ve uzunluk dizenin içindeki bir konuma başvurmalıdır. – Jamie

+0

Dizinler Substring için yanlış. Substring (0, 4) ve Substring (4, 2) olmalıdır. – momar

cevap

1

:

.ForMember(dest => dest.DateTime, 
      opt => opt.MapFrom(src => new DateTime(dest.SubString(0,4), dest.SubString(5,2), 1); 

İki lambda ifadeleri geçmektedir. Ama ikinci lambdadan parametreyi kullanın. Fakat lambda parametreleri, tanımlandıkları lambdaya kadar uzanır. (Bir dışsal kapsamdaki bir değişkeni kapatabilirsin, ancak bunlar kardeşlerin kapsamı değildir, bu yüzden geçerli değildir).

İkinci lamdada dest ve dest kullanmanız gerektiğinden şüpheleniyorum.

+0

temellerine geri döndüm Hala sorun yaşamaya devam ediyorum, aşağıdakileri denedim .ForMember (dest => dest.DateTime, opt => opt.MapFrom (src => yeni DateTime (2015, 1, 1))); – Jamie

+0

ancak bu hatayı alıyorum 'DateTime'dan' Int32'ye geçersiz. Hedef ve kaynak önden geri döndü sanki ... (?) – Jamie

+0

@Jamie Bu bir sonraki sorun. 'DateTime' yapıcısı 'int' parametrelerini alır, dizgeyi geçirirsiniz. En basit (ancak en azından güvenli - başka bir yerde verileri kontrol etmediğiniz sürece), Int32.Parse işlevini kullanmaktır. – Richard

İlgili konular