2012-12-14 28 views
6

ReactiveUI có phương pháp với signitures nhưLàm thế nào để vượt qua LINQ Expressions từ F # C# mã

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 
) 

Trong F # Làm thế nào tôi sẽ xây dựng một đối tượng như

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

Trong C# tôi sẽ làm một cái gì đó giống như

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

EDIT

Tôi đã thử

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

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

nhưng không phải làm việc

Trả lời

4

Tôi không chắc chắn nếu các biểu thức F # 3 truy vấn mới giúp bạn, nhưng PowerPack cũ (vẫn hoạt động tốt!) có phương thức mở rộng Expr.ToLinqExpression() : Expression, để biên dịch biểu thức báo giá F # (ví dụ: <@ fun me -> me.MyProperty @>) vào biểu thức LINQ.

Edit: Như Daniel đã chỉ ra, QuotationToLambdaExpression hiện các công trình, cho F # 3.

+0

Cố gắng đó nhưng tôi nhận được một kết quả của loại "LinqExpression" thay vì "LinqExpression > " – bradgonesurfing

+0

@bradgonesurfing http://msdn.microsoft.com/en-us/library/bb335710.aspx, cụ thể là" Sử dụng phương thức Lambda (Expression, IEnumerable ) hoặc Lambda (Expression, ParameterExpression []) để tạo một đối tượng Biểu thức .'. –

+7

Dường như ['QuotationToLambdaExpression'] (http://msdn.microsoft.com/en-us/library/hh324072.aspx) là cách để làm điều đó trong F # 3.0. – Daniel

Các vấn đề liên quan