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

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

Решение

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

Изменить: Как Дэниел указал, QuotationToLambdaExpression делает работу, для F# 3.

Другие вопросы по тегам