2015-09-26 48 views
0

我已經使用反應式擴展來取得大量成功....靜態地定義.Where()中的條件以及更簡單的條件和聚合。反應式擴展加載/保存linq表達式

我希望能夠做的是在運行時爲用戶提供一些可配置性。我沒有想出一個偉大的方式來做到這一點...但有一些想法...林請求其他方式來做到這一點..

因爲它看起來不像我會真的有一個用戶通過Web應用程序定義一個真正的LINQ表達式...我假設我需要構建某種複雜的標準對象,我可以序列化到/從磁盤,並在啓動時轉換爲LINQ。

有沒有更好的方法來做到這一點,或者是否有像這樣擴大RX的項目?

+0

請發表您的想法。這將爲我們打下基礎。 – Enigmativity

+0

微軟第9頻道有一些關於Rx如何用於爲Cortana供電的有趣視頻。顯然他們擴展了Rx對象以包含序列化。 – Enigmativity

+0

所以我發現參考了一個關於如何在Cortana中使用rx的Bart de Smet的Channel9討論......這正是我尋找的東西......除了沒有看到足夠的細節來實際構建任何東西項目我自己。 https://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Rx-and-Cortana – Ronnyek

回答

0

是絕對,你可以使用System.Linq.Dynamic NuGet包來實現這一目標,例如:

var p = Expression.Parameter(typeof(long), "t"); 
    var lambda = (Func<long,bool>)System.Linq.Dynamic.DynamicExpression 
    .ParseLambda(new[] { p }, typeof(bool),"t % 2 == 0").Compile();  
    var subs = Observable.Interval(TimeSpan.FromSeconds(1)).Where(lambda); 

在上面的代碼,你可以堅持這是在過濾器中的字符串,只要你喜歡重新加載它。