将LINQ查询转换为字符串,发送到远程服务器以使用Roslyn解析为表达式?

时间:2012-03-10 16:19:48

标签: c# .net linq dynamic-linq roslyn

我有一个数据源,例如IDataSource : IEnumerable<IDynamicObject>

一种实现是查询纯XML数据,另一种是查询SQL数据库。

我的数据源没有conrete类型,只针对简单的模式类型。

在某些情况下,这些数据源在同一运行时上下文中实例化,而其他数据源则通过网络访问。

我无法使用LINQ查询我的数据源,并且我计划使用动态对象来仅提取和解析属于实际查询的成员值。

当在相同的运行时上下文中运行时,这可以正常工作,但是当数据源位于远程服务器上的Web服务后面时,这会失败,因为我无法以任何我知道的方式使用LINQ和Web服务。 / p>

所以我一直在寻找一种将LINQ查询格式化为字符串并将其发送到服务器的方法,然后将其解析回表达式并在新的上下文中执行。

我能找到的两种解析表达式的方法是Dynamic LINQFLEE。我只是简单地看了一下它们,但似乎没有一个能够将表达式格式化为字符串并解析它?

我已经阅读了关于Roslyn项目的内容,并且想到它可能会用于此问题吗?有人知道更多吗?

我在IQueryable<TData>看了一些,但我已经阅读了很多关于它的消极事情,所以也许我应该避免它。它也是强类型的,不符合我的需要,因为我不喜欢数据服务器上的任何具体类型。我也看不出如何在Web服务上使用它,强类型?我错过了什么吗?

3 个答案:

答案 0 :(得分:4)

Roslyn最终会让你能够以字符串形式获取LINQ表达式,解析它并对其进行评估。但是,当前的公共CTP(2011年10月发布的版本)不支持LINQ表达式。

答案 1 :(得分:2)

这听起来更像你需要的是能够序列化表达式树,但不一定是C#字符串。

The Expression Tree Serialization sample on MSDN正是如此。它甚至包括一个示例WCF服务和cient,它使用IQueryable<T>完全按照你想要的那样做。

答案 2 :(得分:0)

我想我现在找到了答案:

WCF Data Services

我怎么能错过那个!我虽然只是针对实体框架......