21

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

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

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

4

3 に答える 3

24

ラムダボディを使用するには、.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();                      
              }));
于 2013-04-15T14:52:20.570 に答える
20

これを試して:

Mapper.CreateMap<I_NEWS, NewsModel>().ForMember(x => x.DateCreated,
  opt => opt.MapFrom(src => ((DateTime)src.DateCreated).ToShortDateString()));
于 2013-02-21T16:44:58.950 に答える
0

Nullableが宛先の場合、次のようになります。

Mapper.CreateMap() .ForMember( dest => dest.StartDate, opt => opt.MapFrom( src => string.IsNullOrEmpty(src.StartDate) ? new DateTime?() : DateTime.ParseExact(src.StartDate, DATEFORMAT, CultureInfo.InvariantCulture) ) )
于 2020-07-29T06:12:16.403 に答える