Как передать выражения LinQ из кода F# в код C#

ReactiveUI имеет методы с signitures как

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 ответов


Я не уверен, что новые выражения запроса F# 3 помогут вам, но старый PowerPack (который все еще отлично работает!) имеет метод расширения Expr.ToLinqExpression() : Expression, для компиляции выражений котировок F# (т. е. <@ fun me -> me.MyProperty @>) в выражения LINQ.

Edit: Как заметил Дэниел,--7-->QuotationToLambdaExpression выполняет работы, для F# 3.