【发布时间】:2010-12-17 17:15:13
【问题描述】:
我有一些代码需要扫描分层数据库架构,寻找架构中定义的具有某些有趣属性的属性。我想制作这些属性名称的(平面)列表。
为了(希望)减少混淆,我将架构中定义的类称为“种类”,因为该架构没有描述 C# 类层次结构。
架构可作为 .NET 对象树提供给我;我不需要解析任何 XML 或任何东西。问题是我将在不同点进入模式树,我需要确保我知道从基本类型继承的有趣属性以及直接定义在我的类型上的属性正在看。
results = new List<PropertyDefinition>;
foreach (Kind objKind in objDescription.PossibleKinds)
{
// Iterate up the schema hierarchy
while (objKind != null)
{
foreach (PropertyDefinition prop in objKind.PropertyDefinitions)
{
if (prop.IsInteresting)
results.Add(prop);
}
// Move up a level in the hierarchical relationship
objKind = objKind.BaseKind;
}
}
无论如何,我想知道是否可以编写等效的 LINQ 语句。最外层的 foreach 循环是微不足道的(为了清楚起见,实际上我省略了另一个),但我不确定是否可以在 LINQ 查询中捕获层次结构的迭代。
var query = from objKind in objDescription.PossibleKinds
// What goes here?
from prop in objKind.PropertyDescriptions
where prop.IsInteresting
select prop;
我想这类似于编写一个 LINQ 查询,该查询从链表中的一个节点开始,并不断迭代链表直到它到达末尾。这可能吗?
【问题讨论】:
标签: c# linq recursion linq-to-objects