Normally I can query an entity context using linq in the typical way,
IQueryable<Product> query = from p in db.Products
where p.ProductID > 1
select query;
Now say I wanted to get the expression of this IQueryable, serialize it, and pass it over the wire to be reconstructed on the other end,
Expression ex = query.Expression;
XElement xExpression = serializer.Serialize(ex);
wcfClient.InvokeSomeServiceMethod(xExpression);
How would I reconstruct this on the other end? (the server end, to be specific)
I need to create a new instance of IQueryable and ‘set’ the expression used by the underlying provider by actually passing in an Expression instance, is this possible? There is no setter on IQueryable by default, of course. More specifically I just need an ObjectQuery so I can call ToTraceString() and get the entity sql on the other end. I cant seem to find any point where I can inject the Expression directly.
Thanks.
I would suggest you look at InterLINQ. It provides the ability to serialize an expression and transmit over WCF.
I’m using it with NHibernate to achieve a similar outcome to what you’re describing and it seems to work well. (There’s a bit to get your head around though, so as others have suggested, WCF Data Services / OData would be be quicker/easier).