Linq查询获取父id,祖父id等,直到root id

时间:2014-12-16 21:09:25

标签: c# linq entity-framework nhibernate

我有以下课程

public class Category
{
public virtual int ID { get; set; }
public virtual string Name { get; set; }
public virtual int? ParentID { get; set; }  
public virtual IList<Category> Children { get; set; }
}

我使用Nhibernate将具有字段id,name和parent id的自引用外键关系的数据库表映射到此类(尽管它可能是orm并不重要的实体框架)。

鉴于任何类别,我需要一个方法/查询,给我类别parentid,grandparentid等。我认为这样做的一种方法是使用一种方法,递归提取连续的parentids并在它遇到null parentid时停止。到目前为止,我想出的最好的事情就是按照

的方式做点什么
 newcategory = Load<Category>(category.parentId)
 add newcategoryid to list
 category = newcategory
 repeat until category.parentid is null

但是我想知道这样的事情是否会出现性能问题,因为它可能涉及到数据库的多次访问。

1 个答案:

答案 0 :(得分:2)

正如您所提到的,实体框架可能会遇到困难。您可以将所有内容加载到该表的内存中,然后使用LINQ来递归层次结构。

var categories = from c in category
                 select c;
//ToList executes the SQL statement once
var catList = categories.ToList()
//recurse over in-memory list

或者你可以创建一个SQL存储过程,只需用EF调用它。

相关问题