我有一个父实体和一个子实体,它们之间的关系是1对M。我需要在单个SQL查询中查询包含父实体和子实体,但是Include
方法在某些情况下不能正常工作。
这个可以通过JOIN正确地单个查询Parent
和Child
表:
var r1 =
ctx.Set<Parent>()
.Include(p => p.Childs)
.Where(p => p.Id == 1)
.ToList();
一旦我在运行时创建一个匿名对象,子对象就会丢失,SQL语句只包含父对象的字段。获取子对象仍然是惰性的 - 它们还没有被加载:
var r2 =
ctx.Set<Parent>()
.Include(p => p.Childs)
.Where(p => p.Id == 2)
.Select(p => new { myParent = p})
.ToList();
问题:
- 为什么会这样?
- 如何在我的LINQ中构建一个新的匿名对象,使得子元素不会丢失?
附注:我希望保持Parent的Childs属性为虚拟属性。
var r2 = ctx.Set<Parent>().Include(p => p.Childs).Where(p => p.Id == 2).ToList() /* 或者ToArray()或者其他评估查询的方法 */.Select(p => new { myParent = p}).ToList();
- nemesv