我有一个包含 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/