Linq递归查询获取所有同级

时间:2018-11-10 17:36:38

标签: c# linq

目标是对数据库进行Linq查询,以获取其他ID,这些ID会在名为GetFolder的方法中链接回输入ID。

'Hello'

有了ICollection,我可以查看该文件夹的同级对象。 GetFolders方法返回这些:

Sample Data
Id              parentId
10              9
11              10
12              10
13              12
14              13
15              13
100             20

Expected Output
Id              parentId
10              11
12              10
13              12
14              13

  public class Folder 
  {
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Column("Parent_Id")]
    public int? ParentId { get; set; }

    public virtual ICollection<Folder> Children { get; set; }
  }

我试图编写一个递归函数来获取其余的Id,但是它无法正常工作。 是否有人建议如何编写此递归函数以接收其余ID。

1 个答案:

答案 0 :(得分:0)

怎么样

IEnumerable<int> GetRelatedIds(Folder root)
{        
    var ids = root.Children.SelectMany(c => GetRelatedIds(c)).ToList();
    ids.Add(root.Id);

    return ids;
}

这还将包括根文件夹的ID。如果不需要它,可以将其从列表中删除(它将是最后一个元素),也可以对根的所有子级运行此方法并连接结果。