2012-03-10 27 views
1

我有一個數據源,如IDataSource : IEnumerable<IDynamicObject>將LINQ查詢轉換爲字符串,發送到遠程服務器以使用Roslyn解析表達式?

一個實現是查詢純XML數據,另一個是查詢SQL數據庫。

我的數據源沒有對應的類型,只能處理簡單的模式類型。

在某些情況下,這些數據源是在相同的運行時環境中實例化的,而其他的則是通過網絡訪問的。

我是不是能夠查詢我的數據源與LINQ和我打算使用動態對象只能提取和分析是實際查詢的一部分成員值。

在同一個運行時上下文中運行正常,但是當數據源位於遠程服務器上的Web服務後面時,這會失敗,因爲我無法以任何我知道的方式將LINQ與Web服務一起使用。

所以我一直在尋找我的格式化LINQ查詢作爲一個字符串,並將其發送到服務器,然後解析回的表達,並在新的上下文中執行它的方法。解析表達式我能找到的

兩種方法是Dynamic LINQFLEE。我只是簡單地看過他們,但他們似乎都沒有能夠將表達式格式化爲字符串以及解析它?

我已閱讀關於Roslyn項目,並正在考慮可能它可以用於這個問題?任何人都知道更多?

我在IQueryable<TData>神情有些很好,但我已經讀了很多負面的東西吧,也許我應該避免。它也是強類型的,不符合我的需求,因爲我不想在數據服務器上使用任何具體的類型。我也不明白如何通過Web服務使用這種強制類型?我錯過了什麼嗎?

+1

你讀過關於'IQueryable '的消息嗎?你能解釋爲什麼你認爲它很重要,它是強類型的? – svick 2012-03-10 16:33:42

+0

其主要實施起來很重。我還沒有看過,但我需要通過一個Web服務進行查詢,其中我沒有任何conrete數據類型。那麼我怎麼能在這種情況下使用IQueryable ? – 2012-03-10 16:41:44

+0

爲什麼你沒有具體的數據類型?使用Web服務時你當然可以擁有它們。 – svick 2012-03-10 16:50:26

回答

2

這聽起來更像是你所需要的是能夠序列化表達式樹,但不一定作爲一個C#字符串。

The Expression Tree Serialization sample on MSDN確實如此。它甚至包括一個示例WCF服務和cient,使用IQueryable<T>來完成您想要的功能。

4

Roslyn最終會給你以字符串形式獲取LINQ表達式,解析它並評估它的能力。但是,目前的公共CTP(2011年10月發佈的)不支持LINQ表達式。

0

我想我已經找到了我的現在答案:

WCF Data Services

我怎麼可能錯過了!我雖然只用於Entity Framework ...