2

今日は、このようにオブジェクトをDTOにマッピングしています。

public IEnumerable<ArticleDTO> GetArticlesBasedOnCategorySection(int catSection, int headCategoryID, string customerREFID)
{
    return _articleRepository.GetArticlesByCategory(catSection, headCategoryID, customerREFID).Select(a => Mapper.ToDTO(a)).ToList();
}

しかし、変数の中には、同様の方法でマップしたい別のリストがあります。これをすべてこのように1行で記述することは可能ですか、foreachそれともループを記述してからa.Listをマップする必要がありますか。

4

2 に答える 2

1

匿名オブジェクトで記事とそのアイテムを返すのはどうですか?

public IEnumerable<ArticleDTO> GetArticlesBasedOnCategorySection(int catSection, int headCategoryID, string customerREFID)
{
    return _articleRepository
        .GetArticlesByCategory(catSection, headCategoryID, customerREFID)
        .Select(a => new 
                     { 
                         Article = Mapper.ToDTO(a),
                         Items = a.Items.Select(b => Mapper.ToDTO(b)).ToList()
                     })
        .ToList();            
}
于 2012-11-21T17:06:54.340 に答える
0

1つの方法は、複数のステートメントを持つラムダを使用することです。これがワンライナーと見なすことができるかどうかはわかりません。また、マルチステートメントラムダはあまりLINQ-yではありません。

public IEnumerable<ArticleDTO> GetArticlesBasedOnCategorySection(int catSection, int headCategoryID, string customerREFID)
{
    return _articleRepository
        .GetArticlesByCategory(catSection, headCategoryID, customerREFID)
        .Select(a =>
                {
                    ArticleDTO article = Mapper.ToDTO(a);
                    article.Items = a.Items.Select(b => Mapper.ToDTO(b)).ToList();
                    return article;
                })
        .ToList();
}

ArticleDTOにコピーコンストラクターがある場合は、次のように記述できます。

public IEnumerable<ArticleDTO> GetArticlesBasedOnCategorySection(int catSection, int headCategoryID, string customerREFID)
{
    return _articleRepository
        .GetArticlesByCategory(catSection, headCategoryID, customerREFID)
        .Select(a => new ArticleDTO(Mapper.ToDTO(a))
                     {
                         Items = a.Items.Select(b => Mapper.ToDTO(b)).ToList()
                     })
        .ToList();
}

コンストラクターまたはでアイテムをマップすることもできますMapper.ToDTO(a)

于 2012-11-28T18:41:52.993 に答える