我有这些类型
public class Model
{
public string Name { get; set; }
public virtual List<Nested> Nested { get; set; }
}
public class Nested
{
public Guid ModelId { get; set; }
public virtual Model Model{ get; set; }
public Guid FurtherNestedId{ get; set; }
public virtual FurtherNested FurtherNested { get; set; }
}
public class FurtherNested
{
public Guid Id {get; set;}
public string Name{ get; set; }
}
我正在尝试使用它们来构建如下的视图模型:
_dbContext.Models.Include(x => x.Nested).ThenInclude(x => x.FurtherNested).Select(x => new {
Nested= x.Nested
}).ToList();
由于某种原因,这会创建一个具有Nested属性的对象列表(如预期的那样),但是列表项的Nested属性设置了AnotherNestedId,但没有设置AnotherNested,因此我无法获取ExtraNested.Name。 IE AnotherNestedId存在,但实际的导航属性不存在。
但是我的数据上下文包含...
请问为什么?
编辑:同样值得注意的是,将toList()移到.Select()上方,我得到的正是我想要的,但是执行它需要3倍的时间。
编辑:我正在尝试获得如下内容:
{
any other properties that live on Model,
Nested: [
furtherNestedId: '',
furtherNested: { Name: '' }
]
}
答案 0 :(得分:1)
包含不适用于投影查询。开始投影(选择)后,您需要一直向下进行选择。
所以尝试一下:
var myModels = _dbContext.Models.Include(x => x.Nested).ThenInclude(n => n.FurtherNested).Select(x => new
{
Name = x.Name,
Nested = x.Nested.Select(n => new
{
FurtherNestedId = n.FurtherNestedId,
FurtherNested = n.FurtherNested
})
}).ToList();
希望它会对您有所帮助。