2012-12-14 22 views
6

ReactiveUI ma metod z signitures jakJak przekazać LINQ wyrażeń z F # do kodu C#

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 
) 

w F # W jaki sposób skonstruować obiekt jak

System.Linq.Expressions.Expression<System.Func<TObj, TRet>> property, 

W języku C# Chciałbym zrobić coś takiego

this.ObservableAsPropertyHelper(
    observable, 
    me => me.MyProperty 
) 

EDIT

Próbowałem

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

i

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

ale ani pracy

Odpowiedz

4

Nie jestem pewien, czy nowe wyrażenia F # 3 zapytań pomóc, ale stara PowerPack (który wciąż działa świetnie!) ma metodę rozszerzenia Expr.ToLinqExpression() : Expression, aby skompilować wyrażenia w wyrażeniach F # (np. <@ fun me -> me.MyProperty @>) w wyrażeniach LINQ.

Edit: Jak Daniel wskazał, QuotationToLambdaExpression robi robót budowlanych, F # 3.

+0

Tried to, ale mam wynik typu "LinqExpression" zamiast „LinqExpression > " – bradgonesurfing

+0

@bradgonesurfing http://msdn.microsoft.com/en-us/library/bb335710.aspx, w szczególności" Użyj metody Lambda (Wyrażenie, IEnumerable ) lub Lambda (Expression, ParameterExpression []) aby utworzyć obiekt Wyrażenie ". –

+7

Wygląda na to, że ['QuotationToLambdaExpression'] (http://msdn.microsoft.com/en-us/library/hh324072.aspx) jest sposobem na to w F # 3.0. – Daniel

Powiązane problemy