我有一个名为 Contents 的表。Contents 上存在一对多关系,因此每个内容都可以有一个父级和一个子级。我使用的是 EF Code First,所以我有一个Content
具有Id
、ParentId
和属性Parent
的实体。Children
现在,我正在构建一个基于 ajax 的目录树。我有一个简单的操作,它基于以下内容返回一级内容的 JSON parentId
:
public JsonResult GetContents(int? parentId = null)
{
return Json(db.Contents
.Where(p => p.ParentId == parentId)
.Select(p => new
{
id = p.Id,
name = p.Name
});
}
我想做的下一件事是自动选择一些值。问题是该值可能在树的层次结构中很深,因此对于每个内容,我需要知道所选值是子还是孙等。
public JsonResult GetContents(int? parentId = null, int selectedValue)
{
return Json(db.Contents
.Where(p => p.ParentId == parentId)
.Select(p => new
{
id = p.Id,
name = p.Name
isSelectedValueUnderThisHierarchy: // How can I efficiently implement this?
});
}
使用大量查询很容易实现,但我正在努力使事情尽可能高效,据我所知,EF 没有提供任何递归方法,所以我真的不知道从哪里开始。