Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
递归linq表达式的帮助_Linq - Fatal编程技术网

递归linq表达式的帮助

递归linq表达式的帮助,linq,Linq,我有一个数据库表,其中所有记录相互链接,即类似于下图: 如图中所示,记录可以是根记录,并且可以有1个或多个子记录,其中每个子记录在其ParentID属性中存储其父记录的ID属性。我想知道是否有人能帮我构造一个LINQ表达式,它返回从最后一个子节点开始到以根节点结束的所有节点。我的意思如下。从节点4(ID=4)开始,我必须向上移动到节点2(ID=2),然后是节点1,然后是节点0,从而跳过节点3。我希望我足够清楚,但如果有什么需要澄清,请告诉我。这将完成工作: static IEnumerable

我有一个数据库表,其中所有记录相互链接,即类似于下图:


如图中所示,记录可以是根记录,并且可以有1个或多个子记录,其中每个子记录在其ParentID属性中存储其父记录的ID属性。我想知道是否有人能帮我构造一个LINQ表达式,它返回从最后一个子节点开始到以根节点结束的所有节点。我的意思如下。从节点4(ID=4)开始,我必须向上移动到节点2(ID=2),然后是节点1,然后是节点0,从而跳过节点3。我希望我足够清楚,但如果有什么需要澄清,请告诉我。

这将完成工作:

static IEnumerable<Node> ListParents(IEnumerable<Node> list, int? ID)
{
    var current = list.Where(n => n.ID == ID).FirstOrDefault();
    if (current == null)
        return Enumerable.Empty<Node>();
    return Enumerable.Concat(new []{current}, ListParents(list, current.ParentID));
}

请注意,如果您的
ParentID
关系导致循环,则此函数将无限递归

我刚找到关于这个问题的文章,当时我正在寻找一些Linq查询信息。这些不完全符合我的需要,但我相信它们能满足你的需要

他在最后更新了这篇文章,并链接到一篇新文章:

他创建了扩展方法,从具有自引用父列的falt表创建层次结构集合

如果你还在寻找答案,希望他们能帮助你

class Node
{
    public int ID;
    public int? ParentID;
}