Ich habe Code, der ein hierarchisches Datenbankschema durchsucht und nach Eigenschaften sucht, die im Schema definiert sind und bestimmte interessante Eigenschaften haben. Ich möchte eine (flache) Liste der Namen dieser Eigenschaften erstellen.LINQ Ausdruck für Klettern Objekthierarchie?
Um (hoffentlich) Verwirrung zu vermeiden, werde ich die Klassen aufrufen, die im Schema "Kinds" definiert sind, weil das Schema keine C# -Klassenhierarchie beschreibt.
Das Schema ist für mich als eine Struktur der .NET-Objekte verfügbar; Ich muss kein XML oder irgendetwas analysieren. Das Problem ist, dass ich den Schemabaum an verschiedenen Punkten betrete und ich muss sicherstellen, dass mir interessante Eigenschaften bekannt sind, die von Basistypen geerbt werden, ebenso wie solche, die direkt auf die Art, die ich habe, definiert sind schaue mir gerade an.
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;
}
}
Wie auch immer, ich frage mich, ob es möglich ist, eine äquivalente LINQ-Anweisung zu schreiben. Die äußersten foreach Schleifen sind trivial (es gibt tatsächlich eine andere, die ich aus Gründen der Klarheit weggelassen habe), aber ich bin nicht sicher, ob es möglich ist, die Iteration in der Hierarchie in einer LINQ-Abfrage zu erfassen.
var query = from objKind in objDescription.PossibleKinds
// What goes here?
from prop in objKind.PropertyDescriptions
where prop.IsInteresting
select prop;
Ich denke, das ist ähnlich wie eine LINQ-Abfrage zu schreiben, die in einer verknüpften Liste mit einem Knoten beginnt und halten durch die verkettete Liste iterieren, bis es zu Ende geht. Ist das möglich?
es Schlag mich. Ich hatte fast die gleiche Antwort. Ich habe nur eine Erweiterungsmethode anstelle einer in der 'Kind' Klassendefinition verwendet. Sonst identisch. Du hast meine Aufwertung. – Enigmativity
In diesem Fall habe ich keine Kontrolle über die Kind-Klasse-Definition, so dass es aussieht, als wäre die Erweiterungsmethode auch nützlich. Danke euch beiden! – Hydrargyrum