Reactive Extensions加载/保存linq表达式

时间:2015-09-26 05:59:25

标签: c# system.reactive

我已经使用了被动扩展来获得很大的成功....静态地定义.Where()中的标准,以及更简单的标准和聚合。

我希望能够做的是在运行时为用户提供一些可配置性。我没有想出一个很好的方法来做到这一点......但有一些想法......我正在寻求其他方法来做到这一点..

因为我似乎无法通过网络应用真正让用户定义一个真正的linq表达式...我假设我需要构建某种复杂的我可以序列化到磁盘或从磁盘序列化的标准对象,并在启动时转换为该linq。

有没有更好的方法来实现这一点,或者是否存在像RX那样在RX上展开的项目?

1 个答案:

答案 0 :(得分: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);

在上面的代码中,您可以保留过滤器中的字符串,并根据需要重新加载。