我有一个包含 2 个表的数据库:

  • 项目
  • 项目依赖项

  • 物品有 ID 键

    ItemDependencies 有两列: ItemId DependsOnItemId

    我将其转换为一个集合:
     IEnumerable<Item> items = GetItems();
    

    每个 都有一个: Dependencies 属性,它是一个
    List<Item>
    

    所以我想将初始项目列表过滤为:
  • 给定单个项目,我想要该项目的列表以及递归依赖该项目的所有项目。
  • 给定一个项目,我想要一个该项目及其依赖的所有其他项目的列表(也是递归的)。

  • 在 C#、LINQ 或其他任何可以做到这一点的方法中,这样做的最佳方法是什么。

    最佳答案

    要获取元素的所有依赖项的列表,您可以使用以下递归函数:

    IEnumerable<Item> GetAllDependencies(Item i)
    {
        IEnumerable<Item> a = new Item[] { i };
        IEnumerable<Item> b = i.Dependencies
                               .SelectMany(d => GetAllDependencies(d))
                               .Distinct();
        return a.Concat(b);
    }
    

    此方法假设依赖链中没有循环(如果有循环,它将递归调用自身,直到抛出 StackOverflowException )。

    反过来,我建议构建一个新的数据结构来保存反向依赖关系,然后重用相同的技术。

    关于c# - 在 IEnumerable 集合中找到所有依赖 child 的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3272498/

    10-16 08:53