2

今天我像这样将我的对象映射到 DTO。

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

但是在变量内部,我有另一个列表,我想以类似的方式进行映射。是否可以像这样在一行中编写所有这些,或者我必须编写一个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

一种方法是使用具有多个语句的 lambda。我不确定这是否可以被视为单行,并且多语句 lambda 不是很 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 回答