如何在.Select-LINQ中填充一个额外的属性

问题描述 投票:0回答:1

我正在使用我的Map方法从上下文类DTO创建Company对象,它看起来像这样:

private CompDTO Map(Company company)
{
    return new CompDTO()
    {
        Id = company.Id,
        Title = company.Title,
        ParentCompanyId = company.ParentCompanyId,
    };
} 

CompDTO看起来像这样:

public class CompDTO
{
    public long Id { get; set; }
    public string Title { get; set; }
    public long? ParentCompanyId { get; set; }
    public bool HasChildrens { get; set; }
}

[我正在这样使用它,基本上是在接收公司列表,然后调用另一个Map方法,该方法将从我的公司对象中创建DTO对象,对我来说,主要问题是Companydoes not contain HasChildrens属性,所以我必须以某种方式填充它,而在映射其他道具的地方无法这样做,因为在那里我无法访问公司列表。

private IEnumerable<CompDTO> Map(IEnumerable<Company> companies)
{
    // Mapping all properties except HasChildrens because it does not exist in Company object so I decided to map it later

    var result = companies.Select(c => Map(c));

    // Here I wanted to return all previously mapped objects + I would like to add to each object HasChildren property, but obliviously my syntax is not good:

    return result.Select(c => new { c, c.HasChildrens = companies.Any(cc => cc.ParentCompanyId == c.Id) });
}

我正在检索错误:无效的匿名类型声明符

我也尝试过这样添加HasChildrens:

return result.Select(c => {c.HasChildrens = companies.Any(cc => cc.ParentCompanyId == c.Id)});

但仍然有问题..

基本上,我只是想为每个映射的HasChildrens添加DTO并返回它因为它是在Map方法中添加的。

任何帮助都会很棒!

谢谢

c# linq ienumerable dto
1个回答
0
投票

您的方法private IEnumerable<CompDTO> Map(IEnumerable<Company> companies)的返回类型为IEnumerable<CompDTO>

© www.soinside.com 2019 - 2024. All rights reserved.