2016-04-08 17 views
0

オートマトンを使用して、次の値を実際のDateTimeオブジェクトに変換しようとしています。私はこの仕事をすることに失敗している、何かが間違っているのですか?任意の助け感謝オートマトンを使用して数値をDateTimeオブジェクトに変換する

例は、これまでAutoMapper

_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); 
     }); 

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

class DomainObject 
{ 
    public DateTime DateTime { get; set; } 
} 

試みの下に示さ

201503 
201504 
201505 

オブジェクトの値

コンパイラエラー

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.. 

第二の試み

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

第三の試み

.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))); 

ソリューション

残念ながら、問題の原因となっていた悪いデータを取得していましたが、機能するオートマッパコードは以下のように閉鎖されています。

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

2番目の試みははるかによく見えます。どのように失敗するか説明できますか? – Rawling

+0

ありがとう! - それはコンパイルされますが、ランタイムエラーが発生します。インデックスと長さは、文字列内の場所を参照する必要があります。 – Jamie

+0

サブストリングのインデックスが正しくありません。サブストリング(0,4)とサブストリング(4,2)でなければなりません。 – momar

答えて

1

あなたautomapper .ForMember呼び出しで:

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

次の2つのラムダ式を渡します。しかし、2番目のラムダのパラメータを使用します。しかし、ラムダパラメータはラムダに定義されています。 (外側のスコープ内の変数をクローズすることはできますが、これらは兄弟スコープであるため適用されません)。

srcを使用する必要があり、2番目のラムダでdestを使用しないと思われます。

+0

私はまだ実際に問題を解決していますが、次のように試してみました:ForMember(dest => dest.DateTime、opt => opt.MapFrom(src => new DateTime(2015,1,1))); – Jamie

+0

が、このエラーが発生します。 'DateTime'から 'Int32'への無効なキャストそれはあて先とソースが前に戻るようなものです...(?) – Jamie

+0

@Jamieそれは次の問題です。 'DateTime'コンストラクタは' int'パラメータをとります。あなたは 'string'を渡しています。最もシンプルですが(安全性は最低ですが、他の場所でデータをチェックしない限り)、 'Int32.Parse'を使用します。 – Richard

関連する問題