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;
我正在使用我的 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;