使用唯一的linq查询选择所有相关实体

时间:2013-02-15 14:42:30

标签: c# linq entity-framework

我有与自身有关系的Category表。这是一个树分层视图,例如:oldfather_category - > father_category - > child_category。

category entity

所以我需要在这个表上构建树视图。我需要它的所有行。起初我这样做:

    IEnumerable<Category> list = _service.Get().Where(c => c.ParentID == null);
    Node(list);

当我像这样使用recurcive时:

    private void Node(IEnumerable<Category> list)
    {
        foreach (Category c in list)
        {
            //if has childs
            if (c.Category1.Count > 0)
                Node(c.Category1);
        }
    }
每当我调用 c.Category1.Count 属性(Deferred Execution magic)时,

实体框架都会构建select。但是我想在第一个语句中加载所有实体,我想让make唯一选择sql server。我怎样才能做到这一点?我希望问题很清楚)

编辑:当我使用ToList()时,无论

,Category1属性为null

1 个答案:

答案 0 :(得分:0)

如果不在db服务器上编写函数来遍历所有子节点,就无法加载树中的所有元素。

根据您需要运行的实际查询,您可能能够破解有效的东西。如果特定元素始终是任何树的根,则可以将每个元素的第三个引用添加到树的根,然后在内存中构建实际树。例如,在博客上发表评论的情况下,博客帖子ID可能始终是树的根,然后每个评论仍然具有它所响应的父级。为每个元素添加一个根标识符并对其进行查询,然后在内存中递归地构建树。​​

如果查询的根目录并不总是这种预定义类型的元素,那么最好为服务器编写一个函数来处理这种情况。但是,您将无法使用实体框架进行此查询。