如何将Linq表达式从F#传递给C#代码

时间:2012-12-14 06:51:55

标签: c# linq f#

ReactiveUI的方法有

等签名
public static ReactiveUI.ObservableAsPropertyHelper<TRet> 
  ObservableToProperty<TObj, TRet>(
    this TObj This, 
    System.IObservable<TRet> observable, 
    System.Linq.Expressions.Expression<System.Func<TObj, TRet>> property, 
    TRet initialValue = null, 
    System.Reactive.Concurrency.IScheduler scheduler = null
  )

在F#中我如何构建像

这样的对象
System.Linq.Expressions.Expression<System.Func<TObj, TRet>> property, 

在C#中,我会做类似

的事情
this.ObservableAsPropertyHelper(
    observable,
    me => me.MyProperty
)

修改

我试过

m.ObservableToProperty(this, value, fun me -> me.Property )

m.ObservableToProperty(this, 
            value, 
            new Linq.Expression.Expression(fun me -> me.Property )

但不起作用

1 个答案:

答案 0 :(得分:4)

我不确定新的F#3查询表达式是否对您有所帮助,但旧的PowerPack(仍然效果很好!)有一个扩展方法Expr.ToLinqExpression() : Expression,用于编译F#引用表达式(即{{1} })进入LINQ表达式。

修改 正如丹尼尔指出的那样,QuotationToLambdaExpression为F#3做了工作。