Kamyar Nazeri
Kamyar Nazeri

Reputation: 26534

Dynamic Lambda Expression inside an Expression Query

Is it possible to use a dynamic Linq Expression inside a Query Expression? Something like this:

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

I'm trying to build Expression.Lambda<Func<TSource, bool>> Expression as for SomeExpression.

  1. Is it possible to to use dynamic Linq Expression within the Expression Query or do I need to build the whole Expression tree from scratch?
  2. How can I, if any, use obj1 when I'm building SomeExpression?

Note: I'm using Entity Framework, I can't use SomeExpression.Compile() within the expression tree.

Upvotes: 3

Views: 1912

Answers (2)

Vladislav Zorov
Vladislav Zorov

Reputation: 3056

It's not only possible, it's normal. Large expression trees can be generated from smaller trees (this is what LINQ does). You only have to pass in an Expression<Func<TSource, bool>> to Where().

You can see how in my reply to this other thread here - replacing operator in Where clause Lambda with a parameter . The interesting part is in the MakeWhereLambda method.

Upvotes: 3

NateTheGreat
NateTheGreat

Reputation: 2305

If you're wanting it to be completely dynamic, one possible option would be to use Expression Tree Serialization:

http://expressiontree.codeplex.com/

I started to use this a while back but that task got reprioritized, so I'm not sure how suitable it is for any given task. That said, it looks pretty good...

Hope this helps.

Nate

Upvotes: 1

Related Questions