列表中的c#Lambda查询,其中包含用于映射的列表

时间:2012-11-21 16:19:44

标签: linq lambda

今天我正在将我的对象映射到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。

2 个答案:

答案 0 :(得分: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();            
}

答案 1 :(得分: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)中映射项目。