在 IEnumerable 集合中查找所有依赖子项的最佳方法是什么
我有一个包含 2 个表的数据库:
- Items
- ItemDependency
Items 的键为 ID
ItemDependency 有两列:ItemId 和 DependsOnItemId
我将其转换为集合:
IEnumerable<Item> items = GetItems();
每个项目都有一个:依赖项属性,它是一个
List<Item>
所以我想将初始项目列表过滤为:
给定一个项目,我想要一个列表该项目以及递归依赖于该项目的所有项目。
给定一个项目,我想要该项目及其所依赖的所有其他项目的列表(也是递归地)。
在 C#、LINQ 或其他可以实现这一点的东西中,最好的方法是什么?
I have a database with 2 tables:
- Items
- ItemDependencies
Items has key of ID
ItemDependencies have two columns: ItemId, and DependsOnItemId
I conver this to a collection:
IEnumerable<Item> items = GetItems();
each item has a: Dependencies property which is a
List<Item>
So i want to filter the initial items list to:
Given a single item, i want a list of that item and all of the items that dependon this item recursively.
Given a single item, i want a list of that item and all of the other items that it depends on (also recursively).
what is the best way of doing this in C#, LINQ, or anything else that would do the trick.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
要获取元素的所有依赖项的列表,您可以使用以下递归函数:
此方法假设依赖项链中没有循环(如果存在循环,它将递归地调用自身,直到抛出 StackOverflowException )。
为了进行相反的操作,我建议构建一个新的数据结构来保存反向依赖性,然后重用相同的技术。
To get a list of all the dependencies of an element you can use the following recursive function:
This method assumes that there are no cycles in the dependency chain (if there is a cycle it will call itself recursively until it throws a
StackOverflowException
).To do the reverse I'd suggest building a new data structure to hold the reverse-dependencies and then reuse the same technique.
这是获取所有依赖项的一种方法。
这是获取所有反向引用的一种方法。
两种算法都应该处理参考图中的循环。
Here is one way of getting all depedencies.
And here is one way of getting all back references.
Both algorithms should handle cycles in the reference graph.