2012-12-08 53 views
1

我開始探索動態表達式,所以請幫我解決一個問題。 我有一個對象動態表達從屬性對象的屬性

public class Categorisation{ 
     string Name{get;set;} 
    } 

    public class Client{ 
     public Categorisation Categorisation{get;set;} 
} 

所有我需要的是寫一個動態表情和呼叫分類。 名稱。客戶端對象的等號(「A1」)。

x=>x.Categorisation.Name.Equals("A1") 

我該如何使用表達式來做到這一點?

var param = Expression.Parameter(typeof(Client)); 
    var prop = Expression.Property(param, typeof(Client).GetProperty("Categorisation")); 
    var argument = Expression.Constant("A1"); 
    var method = typeof(string).GetMethod("Equals", new[] { typeof(string) }); 
    var call = Expression.Call(prop, method); 
    var expr = Expression.Lambda<Func<Client, bool>>(call, param); 

當然這個代碼是錯誤的,我所說的方法,從分類屬性等於,而不是從分類的名稱。但是如何調用Name屬性?

回答

2
var param = Expression.Parameter(typeof(Client)); 
var prop = Expression.Property(param, typeof(Client).GetProperty("Categorisation")); 
var namePropExpr = Expression.Property(prop, "Name"); 
var argument = Expression.Constant("A1"); 
var method = typeof(string).GetMethod("Equals", new[] { typeof(string) }); 
var call = Expression.Call(namePropExpr, method, argument); 
var expr = Expression.Lambda<Func<Client, bool>>(call, param);