我正在使用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方法的方式:
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)});
}
在完成主映射后,我试图为每个HasChildrens
项目填充return result.Select
中的compDTO
属性。
但是它不起作用,因为它说: [1]: https://i.stack.imgur.com/T7D3A.png
但是我想还有一个更深层次的问题,因为我只是添加了这样的测试:
return result.Select(c => { c.HasChildrens = true; });
它说:不能从用法中推断出方法的类型参数。
任何一种帮助都很棒
答案 0 :(得分:2)
IEnumerable Select应该从输入创建一个新序列。如果您只是想使用Select作为一个foreach来更改属性,则需要返回传递给lambda的对象
return result.Select(c =>
{
c.HasChildrens = companies.Any(cc => cc.ParentCompanyId == c.Id);
return c;
});
但是,您真的喜欢这种方法而不是简单的For Loop吗?我觉得这更清楚
foreach(Company c in result)
c.HasChildrens = companies.Any(cc => cc.ParentCompanyId == c.Id);
return result;