LINQ - 对于 select 中的每一项,将值填充为一个未填充的值 属性

LINQ - For each item in select populate value to one unpopulated property

我正在使用我的 Map 方法从我的上下文 class Company 中创建 DTO 对象,映射如下所示:

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 方法的方式:

private IEnumerable<CompDTO> Map(IEnumerable<Company> companies)
{

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

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

在主映射之后,我试图在我的 return result.Select 中为每个 compDTO 项目填充 HasChildrens 属性。

但它不起作用,因为它说:

但我想还有更深层次的问题,因为我添加了这样的简单测试:

return result.Select(c => { c.HasChildrens = true; }); 

它说:方法的类型参数无法从用法中推断出来。

任何形式的帮助都会很棒

IEnumerable Select 应该根据输入创建一个新序列。如果您只想使用 Select 更改 属性,因为它是 foreach,那么您需要 return 将对象传递给您的 lambda

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

但与简单的 For 循环相比,您真的更喜欢这种方法吗?我觉得这个更清楚

foreach(Company c in result)
    c.HasChildrens = companies.Any(cc => cc.ParentCompanyId == c.Id);

return result;