【发布时间】:2011-09-22 21:17:33
【问题描述】:
通常我可以使用 linq 以典型方式查询实体上下文,
IQueryable<Product> query = from p in db.Products
where p.ProductID > 1
select query;
现在假设我想获取这个 IQueryable 的表达式,对其进行序列化,然后将其通过网络传递到另一端进行重构,
Expression ex = query.Expression;
XElement xExpression = serializer.Serialize(ex);
wcfClient.InvokeSomeServiceMethod(xExpression);
我将如何在另一端重建它? (具体是服务器端)
我需要创建一个新的 IQueryable 实例,并通过实际传入一个 Expression 实例来“设置”底层提供程序使用的表达式,这可能吗?当然,默认情况下 IQueryable 上没有设置器。更具体地说,我只需要一个 ObjectQuery,这样我就可以调用 ToTraceString() 并在另一端获取实体 sql。我似乎找不到任何可以直接注入表达式的点。
谢谢。
【问题讨论】:
-
您的问题是:如何在服务器内部传递和调用查询?
-
是的,基本上。不过我需要传入一个 Expression 实例,因为查询是在客户端而不是服务器上编写的。
-
这并不容易。看看 OData 是如何做到这一点的(通过线路传递查询并在服务器端重建它)
标签: c# wcf linq entity-framework-4 xml-serialization