Динамическое лямбда-выражение внутри запроса выражения - PullRequest
3 голосов
/ 13 марта 2012

Можно ли использовать динамическое выражение Linq внутри выражения запроса? Примерно так:

from obj1 in ObjectSet1
let res = ObjectSet2.Where(* SomeExpression *)
where ...
select ...

Я пытаюсь построить Expression.Lambda<Func<TSource, bool>> выражение как для SomeExpression.

  1. Можно ли использовать динамическое выражение Linq в запросе выражений или мне нужно построить все дерево выражений с нуля?
  2. Как я могу, если таковые имеются, использовать obj1 при создании SomeExpression?

Примечание: я использую Entity Framework, я не могу использовать SomeExpression.Compile () в дереве выражений.

Ответы [ 2 ]

3 голосов
/ 13 марта 2012

Это не только возможно, это нормально.Большие деревья выражений могут быть сгенерированы из меньших деревьев (это то, что делает LINQ).Вам нужно только передать от Expression<Func<TSource, bool>> до Where().

. Вы можете увидеть, как в моем ответе на этот другой поток здесь - замена оператора в предложении Where лямбда-параметром с параметром .Интересная часть - метод MakeWhereLambda.

1 голос
/ 13 марта 2012

Если вы хотите, чтобы он был полностью динамичным, один из возможных вариантов - использовать сериализацию дерева выражений:

http://expressiontree.codeplex.com/

Я начал использовать это некоторое время назад, но эта задача была перераспределена, поэтому я не уверен, насколько она подходит для какой-либо конкретной задачи. Тем не менее, это выглядит довольно хорошо ...

Надеюсь, это поможет.

Nate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...