Как передать выражения 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.