【发布时间】:2012-06-19 09:25:26
【问题描述】:
我需要通过 linq 获取嵌套集合的一个节点。
这是嵌套类:
public class Group
{
public int Id { get; set; }
public string Description { get; set; }
public int ParentId { get; set; }
public List<Group> Groups { get; set; }
}
此类的每个实例都可以在 Groups 方法中具有多个实例,依此类推。每个实例都通过 ParentId 属性链接。
我需要,有一个 Group 类的实例,检索他的父亲。我试过这个:
var parent = _repositoryGroups
.Where(g => g.Id == [my Group instance].ParentId)
.SelectMany(g => g.Groups)
.FirstOrDefault()
我不知道为什么,但它并不总是找到父实例并且它从第二层开始寻找(但这不是一个真正的问题)。
在这个嵌套类的所有深处找到元素的最佳方法是什么?
谢谢
【问题讨论】:
-
我认为您在滥用 SelectMany。如果您删除该行,它应该可以工作
-
我同意@Schiavini。如果没有
SelectMany,查询将返回第一个具有所需 id 的组(返回父亲)。从该父项中选择所有组,然后取第一个组,看起来它会返回父项的第一个子项,显然不是父项。 -
如果没有
SelectMany,它将无法工作。它只检索第一级下的组... -
如果我理解你的问题,你只想要父母对吗?如果您想要父级的所有子级,请删除 FirstOrDefault 然后
-
第 1 组 -> 第 2 组 -> 第 3 组 是的,我只想要父母。我的存储库中只有一个元素(第 1 组),我想知道第 3 组的父亲。我需要循环所有嵌套组,直到 Id 属性等于我的子元素的 ParentId。谢谢。