1

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

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

我的数据源没有具体的类型,并且仅适用于简单的模式类型。

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

我无法使用 LINQ 查询我的数据源,我计划使用动态对象仅提取和解析作为实际查询一部分的成员值。

这在相同的运行时上下文中运行时效果很好,但是当数据源位于远程服务器上的 Web 服务后面时,这会失败,因为我无法以我所知道的任何方式将 LINQ 与 Web 服务一起使用。

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

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

我已经阅读了有关 Roslyn 项目的信息,并在想也许它可以用来解决这个问题?有人知道更多吗?

我也看过一些,IQueryable<TData>但我读过很多关于它的负面消息,所以也许我应该避免它。此外,它是强类型的,不符合我的需求,因为我不希望数据服务器上有任何具体类型。我也看不到如何通过网络服务使用强类型?我错过了什么吗?

4

3 回答 3

4

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

于 2012-03-11T02:49:58.467 回答
2

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

MSDN 上的表达式树序列化示例正是这样做的。它甚至包括一个示例 WCF 服务和 cient,它们使用IQueryable<T>.

于 2012-03-10T16:41:18.090 回答
0

我想我现在找到了答案:

WCF 数据服务

我怎么会错过!我虽然它仅适用于实体框架......

于 2012-03-19T17:37:06.857 回答