次の問題に頭を悩ませることはできません。 LINQと式ツリーの制限だと感じていますが、ラムダ本体を受け入れる方法がわかりません。カスタムコンバーターを作成せずにこれを実現できますか?
Mapper.CreateMap<I_NEWS, NewsModel>()
.ForMember(x => x.DateCreated, opt => opt.MapFrom(src => {
var dt = (DateTime)src.DateCreated;
return dt.ToShortDateString();
}));
このエラーが発生します:ステートメント本体を持つラムダ式を式ツリーに変換できません
これを試して:
Mapper.CreateMap<I_NEWS, NewsModel>().ForMember(x => x.DateCreated,
opt => opt.MapFrom(src => ((DateTime)src.DateCreated).ToShortDateString()));
ラムダボディを使用するには、.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();
}));