web-dev-qa-db-ja.com

AutoMapperと日時を文字列に変換

次の問題に頭を悩ませることはできません。 LINQと式ツリーの制限だと感じていますが、ラムダ本体を受け入れる方法がわかりません。カスタムコンバーターを作成せずにこれを実現できますか?

 Mapper.CreateMap<I_NEWS, NewsModel>()                  
              .ForMember(x => x.DateCreated, opt => opt.MapFrom(src => {
                  var dt = (DateTime)src.DateCreated;
                  return dt.ToShortDateString();                      
              }));

このエラーが発生します:ステートメント本体を持つラムダ式を式ツリーに変換できません

20
jaffa

これを試して:

Mapper.CreateMap<I_NEWS, NewsModel>().ForMember(x => x.DateCreated,
  opt => opt.MapFrom(src => ((DateTime)src.DateCreated).ToShortDateString()));
16

ラムダボディを使用するには、.ResolveUsingの代わりに.MapFromを使用します。

作成者 によると:

MapFromには、式ツリーを必要とする追加のものがいくつかあります(nullチェックなど)。

したがって、ステートメントは次のようになります。

 Mapper.CreateMap<I_NEWS, NewsModel>()                  
              .ForMember(x => x.DateCreated, opt => opt.ResolveUsing(src => {
                  var dt = (DateTime)src.DateCreated;
                  return dt.ToShortDateString();                      
              }));
24
Mrchief