У меня есть код, который должен сканировать иерархическую схему базы данных и искать свойства, определенные в схеме, которые имеют определенные интересные свойства.Я хочу сделать (плоский) список имен этих свойств.
Чтобы (надеюсь) уменьшить путаницу, я назову классы, определенные в схеме, "Виды", поскольку схема не описывает иерархию классов 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.Я предполагаю, что это похоже на написание запроса LINQ, который начинается с узла в связанном списке и продолжает перебирать связанный список, пока не дойдет до конца.Это возможно?