Note that there are some explanatory texts on larger screens.

plurals
  1. POLINQ expression for climbing object hierarchy?
    primarykey
    data
    text
    <p>I've got some code that needs to scan through a hierarchical database schema, looking for properties defined in the schema that have certain interesting properties. I want to make a (flat) list of the names of these properties. </p> <p>To (hopefully) reduce confusion, I'll call the classes that are defined in the schema "Kinds", because the schema does not describe a C# class hierarchy.</p> <p>The schema is available to me as a tree of .NET objects; I don't need to parse any XML or anything. The issue is that I'll be entering the schema tree at various points, and I need to make sure that I'm aware of interesting properties that are being inherited from base kinds as well as those that are directly defined on the kind that I'm currently looking at.</p> <pre><code>results = new List&lt;PropertyDefinition&gt;; 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; } } </code></pre> <p>Anyway, I'm wondering if it's possible to write an equivalent LINQ statement. The outermost foreach loops are trivial (there's actually another one that I've left out for clarity) but I'm not sure whether it's possible to capture the iteration up the hierarchy in a LINQ query.</p> <pre><code>var query = from objKind in objDescription.PossibleKinds // What goes here? from prop in objKind.PropertyDescriptions where prop.IsInteresting select prop; </code></pre> <p>I guess this is similar to writing a LINQ query that starts with a node in a linked list and keeps iterating through the linked list until it gets to the end. Is that possible?</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload