Parámetro del árbol de expresión de C # para la propiedad de navegación principal

c# entity-framework expression-trees lambda

Pregunta

¿Cómo puedo crear una ParameterExpression para el lado primario de una propiedad de navegación de 1 a *?

Los siguientes trabajos para la entidad hijo:

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

Probar algo similar en TParent produce una consulta que se origina en el contexto y no como una propiedad en el elemento secundario.

El equivalente lambda sería así:

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

Editar para mayor claridad:

Uso lo siguiente para crear una expresión de miembro a partir de una propiedad:

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

Así que parece que debería estar usando MemberExpression en lugar de ParameterExpression para este caso.

Respuesta experta

Estoy un poco confundido ... ".Bar" no es una ParameterExpression , es una MemberExpression . f es el parámetro. ¿Qué es exactamente lo que quieres hacer?

Tenga en cuenta que una opción es cargar el código de muestra en el reflector, activar las sugerencias de .NET 3.5 y leer cómo lo hace: se verá como el código aquí , pero generalmente es fácil de seguir.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué