0

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

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; }
  }

拥有 ICollection 允许我查看该文件夹的兄弟姐妹。GetFolders 方法返回这些:

Id              parentId
10              11
11              10
12              10

    private async Task<Folder> GetFolder(int folderId)
    {
      var entity = await Database.Folders
        .Where(e => e.Id == folderId)
        .Include(e => e.Children)
        .SingleOrDefaultAsync();

      return entity;
    }

我试图编写一个递归函数来获取其余的 Id,但它不能正常工作。有没有人对如何编写这个递归函数来接收其余的 Id 有任何建议。

4

1 回答 1

0

怎么样

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

    return ids;
}

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

于 2018-11-10T19:23:56.467 回答