Параметр дерева выражений C # для родительского свойства навигации - PullRequest
1 голос
/ 11 февраля 2009

Как создать выражение ParameterExpression для родительской части свойства навигации от 1 до *?

Следующие работы для дочерней сущности:

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

Попытка чего-то подобного в TParent приводит к запросу, исходящему из Context, а не как свойство дочернего элемента.

Лямбда-эквивалент будет выглядеть так:

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

Изменить для ясности:

Я использую следующее для создания выражения члена из свойства:

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

Похоже, что для этого случая я должен использовать MemberExpression вместо ParameterExpression.

1 Ответ

1 голос
/ 11 февраля 2009

Я немного растерялся ... ".Bar" не a ParameterExpression - это MemberExpression. f - это параметр. Что именно вы хотите сделать?

Обратите внимание, что один из вариантов - загрузить пример кода в отражатель, включить подсказки .NET 3.5 и прочитать, как он это делает - это будет выглядеть как код здесь , но обычно это легко достаточно, чтобы следовать.

...