C# C-布尔属性值不会更改:(
我设置初始布尔值只是因为在我的Map方法中进行了测试,所以我将HasChildrens值设置为true,这样我可以在以后手动更改该值时在我的应用程序中检查它是否真的会更改,因为我怀疑它不会更改..不幸的是,我是对的:/ 流程如下:C# C-布尔属性值不会更改:(,c#,list,linq,C#,List,Linq,我设置初始布尔值只是因为在我的Map方法中进行了测试,所以我将HasChildrens值设置为true,这样我可以在以后手动更改该值时在我的应用程序中检查它是否真的会更改,因为我怀疑它不会更改..不幸的是,我是对的:/ 流程如下: public async Task<IEnumerable<CompDTO>> GetCompanies() { var companies = await _context.Companies.ToListAsync();
public async Task<IEnumerable<CompDTO>> GetCompanies()
{
var companies = await _context.Companies.ToListAsync();
var result = GetMappedData(companies);
foreach (CompDTO comp in result)
{
comp.HasChildrens = false;
}
return result;
}
private IEnumerable<CompDTO> GetDataMapped(IEnumerable<Company> companiesList)
{
return companiesList.Select(company => Map(company));
}
private CompDTO Map(Company company)
{
return new CompDTO()
{
Id = company.Id,
Title = company.Title,
ParentCompanyId = company.ParentCompanyId,
HasChildrens = true
};
}
每次我检查GetCompanies方法的结果和HasChildrens的值时,我真的很惊讶它总是正确的!即使我在我的方法comp.HasChildrens=false中写道
这真让我头疼:D
谢谢你的帮助
干杯这是:
将保存到结果变量,而不是查询的结果。这是因为GetMappedData返回的是要开始的查询,而不是实现IEnumerable接口(如List)的对象
在下一行,foreach循环枚举查询,因此查询最终开始执行。它成功地更改了每个元素的HasChildrens属性,但序列本身不会执行任何操作
在下一行中,返回结果,这也是查询,而不是查询的结果。当GetCompanys的调用方尝试枚举该查询时,它再次开始枚举,生成CompDTO的不同实例的新序列,而这一次在继续之前没有foreach循环来修改它们,因此观察属性值为false
第一次调用查询时具体化查询:
var result=GetMappedDatacompanies.ToList;
请将您的COMPDTO添加到您的POST中。考虑在GETDATAMEAP中返回IQueDype,而不是IQueDebug。这不会解决您的问题,但是在发送之前,实现查询是符合答案的。但是它会使GETDATAMAPEP方法返回一个查询而不是具体化的对象更清楚。ng Automapper在您的项目中,它将简化您的代码。您可以简单地向我解释一下将查询保存到结果变量的方法吗?是否有GetMappedData方法返回的数据?作为开发人员,当我的方法返回查询而不是查询结果时,这对我意味着什么?这意味着什么意思是实现我的查询?那是什么?@MateuszRek请点击链接。
var result = GetMappedData(companies);