我想在单个查询中检索一组对象 ( A
) 和一些相关对象 ( )。B
没有导航属性A
,B
所以我相信我需要使用以下语法:
select a from db.As where a.Id = x select new AndBHolder
{
A = a,
Bs = select b from db.Bs where b.ASomeId == A.SomeId select b
}
我不确定这是否是最好的方法,但它确实有效。但是,我现在需要包含B
(列表Cs
)的属性。我没想到它会起作用,但我尝试了:
select a from db.As where a.Id = x select new AndBHolder
{
A = a,
Bs = select b from db.Bs.Include("Cs") where b.ASomeId == A.SomeId select b
}
失败并显示“方法...包含在类型上声明的...不能用类型的实例调用...”。接下来我想我会在投影中尝试投影:
select a from db.As where a.Id = x select new AndBHolder
{
A = a,
Bs = select b from db.Bs where b.ASomeId == A.SomeId select new B
{
Id = b.Id,
// ...
Cs = select c from db.Cs where c.BId == b.Id select c
}
}
失败并显示“B
无法在 LINQ to Entities 查询中构造实体或复杂类型''”,因为您不允许投影到映射对象中。那么我如何检索Bs
他们Cs
填充的内容,或者不支持二级包含?我是否只需要对数据库进行两次调用,一次是检索 As ,一次是Bs
使用他们的检索Cs
?