在linq中,.需要一个Expression>谓词,我可以用F#编写
<@ fun item:'a -> condition @> // Expr<'a -> bool>
Run Code Online (Sandbox Code Playgroud)
我正在使用FSharp.Powerpack从引用构建表达式,但它给我的是一个MethodCallExpression.看起来很深,powerpack代码正确构建了lambda,但是将它包装在Convert调用中(为什么会这样?).我想知道是否将参数转换为方法调用(一个lambda)最终会给我表达式>我需要.
所以问题是转换调用的原因,以及如何使用Func签名实际获取lambda.
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
)
Run Code Online (Sandbox Code Playgroud)
在F#中我如何构造一个像这样的对象
System.Linq.Expressions.Expression<System.Func<TObj, TRet>> property,
Run Code Online (Sandbox Code Playgroud)
在C#中,我会做类似的事情
this.ObservableAsPropertyHelper(
observable,
me => me.MyProperty
)
Run Code Online (Sandbox Code Playgroud)
编辑
我试过了
m.ObservableToProperty(this, value, fun me -> me.Property )
Run Code Online (Sandbox Code Playgroud)
和
m.ObservableToProperty(this,
value,
new Linq.Expression.Expression(fun me -> me.Property )
Run Code Online (Sandbox Code Playgroud)
但都没有工作