嘿,我有以下课程:
public class Tree
{
public int Id { get; set; }
public Tree Parent { get; set; }
public ICollection Chidren { get; set; }
}
我想获得所有相关实体。
我的树状结构如下所示:
- Root (id 1)
-- Cat1 (id 2)
--SubCat 1 (id 4)
--SubCat 2 (id 5)
-- Cat2 (id 3)
如果我试图让所有实体使用:
_context.Entity.FirstOrDefault(x => x.Id == 1)
.Include(x => x.Children)
它给了我Root,cat1和cat2(作为孩子),但是Cat1和Cat2的孩子们都失踪了。 是否有可能获得所有相关实体,从根实体开始,到#34;儿童的孩子结束"?
答案 0 :(得分:1)
好的,我理解。
像这里解释一样:Understanding .AsEnumerable() in LINQ to SQL
AsEnumerable()和ToList()将SQL查询发送到数据库。因此,使用SQL端加载包含所有子对象的所有数据,然后在代码端过滤ID。
如果你在SQL查询中执行FirstOrDefault(),你将只获得id = 1的树和他的第一个孩子。
您可以使用:
var tree = _context.Trees
.Include(x => x.Children)
.AsEnumerable()
.FirstOrDefault(x => x.Id == 1);
但是要小心,也许你正在加载这么多数据,它可能非常繁重和缓慢,具体取决于数据库大小。
否则,您可以加载2次,首先加载#1元素,然后加载他的孩子。