在我的应用程序中,我有以下类:
public class Area : ModelBase
{
public Guid AreaTypeId{ get; set; }
public AreaType AreaType { get; set; }
public string Code { get; set; }
public string Description { get; set; }
}
public class AreaType : ModelBase
{
public string Name { get; set; }
public Guid ProjectId { get; set; }
public Project Project { get; set; }
public ICollection<Area> Areas { get; set; }
}
Area类有一个dto,如下所示:
public class AreaDto: DtoBase
{
public Guid AreaTypeId { get; set; }
public string Code { get; set; }
public string Description { get; set; }
}
我有一个规范文件,用于根据提供的数据获取数据:
public class AreaSpecification : Specification<Area>
{
public AreaSpecification(AreaFilter filter)
{
if (filter.ProjectId != Guid.Empty) {
Query
.Where(a => a.AreaType.ProjectId == filter.ProjectId);
}
if (filter.AreaTypeId != Guid.Empty)
{
Query
.Where(a => a.AreaTypeId == filter.AreaTypeId)
.Include(a => a.AreaType);
}
}
}
这是使用Ardalis. specification。
我想要的是,当提供AreaTypeId时,它将返回使用该Id的Area以及AreaType属性。我想我可以通过使用以下命令来获取它们:
.Include(a => a.AreaType)
但是,无论该行是否存在,返回的数据都是相同的,AreaType不显示。我错过了什么,我如何才能让它显示?
如果我将第二个if语句更新为:
if (filter.AreaTypeId != Guid.Empty)
{
Query
.Where(a => a.AreaType.Id == filter.AreaTypeId);
}
它仍然工作,所以AreaType数据在那里,只是没有显示
2条答案
按热度按时间wlsrxk511#
发现了我的错误在我的AreaDto文件中,我没有添加用于显示AreaType名称的属性。所以当我更新我的dto时,就像这样:
然后做了我的查询:
它显示了我要查找的数据
pgky5nke2#
要在结果中包含
AreaType
属性,可以修改AreaSpecification
以使用Include方法沿着ThenInclude
方法: