3

AutoMapper を使用して、オブジェクトのリストを含む Domain-object からマップしようとしています。ここには、AutoMapper がそのリストを宛先オブジェクトの 2 つの宛先に分割するために使用するプロパティを使用したいブール型のプロパティがあります。 .

私の基本的なドメインは次のようになります(ソース)

//Domain object
public class Article
{
  public bool IsActive { get; set; }
}

したがって、私のソースはIList<Article>になります

私のビューは次のようになります(宛先)

//DTO
public class ViewAllArticles
{
  public IList<ViewArticle> ActiveArticles { get; set; }
  public ILIst<ViewArticle> InactiveArticles { get; set; }
}

public class ViewArticle
{
  public bool IsActive { get; set; }
}

指名手配のマッピング

//wanted mapping code (source to destination)
Mapper.Map<IList<Article>, ViewAllArticles>(collectionOfAllArticles)

ここで、ActiveArticles には「IsActive=true」の記事のみが含まれ、InactiveArticles の場合はその逆です。

あなたの誰かが、私がこの種のマッピングを始めるのを手伝ってくれることを願っています.

前もって感謝します。

4

2 に答える 2

5

このようにできます

internal class StartNewDemo
{
    public static void Main(string[] args)
    {
        Mapper.CreateMap<IList<Article>, ViewAllArticles>()
            .ForMember(map => map.ActiveArticles, opt => opt.MapFrom(x => x.Where(y => y.IsActive)))
            .ForMember(map => map.InactiveArticles, opt => opt.MapFrom(x => x.Where(y => !y.IsActive)));

        var list = new List<Article>() { new Article { IsActive=true }, new Article { IsActive = false } };
        var result = Mapper.Map<List<Article>, ViewAllArticles>( list );
    }
}
于 2012-07-19T14:44:55.233 に答える
1
Mapper.CreateMap<IList<Article>, ViewAllArticles>()
  .AfterMap( (arts , artsvm) => 
{
   //var artsvm = new ViewAllArticles();
   artsvm.ActiveArticles = arts.Where(a=> IsActive==true).ToList();
   artsvm.InactiveArticles = arts.Where(a=> IsActive==false).ToList();
}

ConvertUsingを実行することもできますが、唯一の違いは new ViewAllArticles、作成する責任があるため、から始めることです。ここでそれを行わなかった唯一の理由は、ConvertUsingが複数行のラムダを許可するかどうかを思い出せなかったためですが、実際には代わりにConvertUsingを試して、それが機能するかどうかを確認します。

于 2012-07-19T14:28:08.557 に答える