C # Expression Tree-Parameter für die übergeordnete Navigationseigenschaft

c# entity-framework expression-trees lambda

Frage

Wie kann ich einen ParameterExpression für die übergeordnete Seite einer 1 zu * Navigation-Eigenschaft erstellen?

Folgendes funktioniert für die untergeordnete Entität:

var parameter = Expression.Parameter(
    typeof(T), // where T is the entity type
    GetParameterName()); // helper method to get alias

Wenn Sie etwas Ähnliches auf TParent versuchen, entsteht eine Abfrage, die aus dem Kontext und nicht als Eigenschaft auf dem Kind stammt.

Das Lambda-Äquivalent wäre wie folgt:

var q = from f in context.Foo 
        where f.Bar.BarId == 1...
         // where bar is the Navigation Property to the parent

Edit für Klarheit:

Ich verwende Folgendes, um einen Member-Ausdruck aus einer Eigenschaft zu erstellen:

Expression exp = Expression.Equal(
    Expression.Property(parameter, "SomeColumn"),
    Expression.Constant("SomeValue"));

Es sieht also so aus, als müsste ich MemberExpression anstelle von ParameterExpression für diesen Fall verwenden.

Expertenantwort

Ich bin ein wenig verwirrt ... ".Bar" ist keine ParameterExpression - es ist eine MemberExpression . f ist der Parameter. Was genau willst du machen?

Beachten Sie, dass eine Option darin besteht, den Beispielcode in Reflector zu laden, die .NET 3.5-Hinweise zu ändern und zu lesen, wie es funktioniert - es sieht hier wie der Code aus , ist aber normalerweise einfach zu folgen.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow