leo*_*ora 3 c# linq collections ienumerable
我有一个包含2个表的数据库:
项目具有ID密钥
ItemDependencies有两列:ItemId和DependsOnItemId
我把它转换成一个集合:
IEnumerable<Item> items = GetItems();
Run Code Online (Sandbox Code Playgroud)
每个项目都有一个:Dependencies属性,它是一个
List<Item>
Run Code Online (Sandbox Code Playgroud)
所以我想过滤初始项目列表:
给定一个项目,我想要一个该项目的列表以及递归依赖此项目的所有项目.
给定一个项目,我想要一个该项目的列表以及它所依赖的所有其他项目(也是递归的).
在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);
}
Run Code Online (Sandbox Code Playgroud)
此方法假定依赖关系链中没有循环(如果存在循环,它将递归调用自身,直到它抛出a StackOverflowException
).
为了做到这一点,我建议构建一个新的数据结构来保存反向依赖,然后重用相同的技术.
归档时间: |
|
查看次数: |
279 次 |
最近记录: |