2014-09-13 108 views
3

我試圖實現這種表達式:「A => ABWhere(extExp).Count()> 0」,並且我遇到了如何爲Where (...),這是我假設的擴展方法ICollection <>。有人可以幫忙嗎?用「where」方法調用的表達式

Expression<Func<N, bool>> conditions = c => c.T_ID == 1 || c.T_ID == 2; 
ParameterExpression mpe = Expression.Parameter(typeof(T), "A"); 
Expression prop = Expression.Property(mpe,typeof(T).GetProperty("B")); 
... 
var propWhere = Expression.Call(..., prop, conditions); 

如何調用它正確

回答

1

善有善報有一個重載調用需要的MethodInfo的。要獲取方法的信息,我認爲這是最好的,從這個答案使用的代碼 - https://stackoverflow.com/a/21060046/122507

public static MethodInfo GetMethodInfo(Expression<Action> expression) 
{ 
    var member = expression.Body as MethodCallExpression; 

    if (member != null) 
     return member.Method; 

    throw new ArgumentException("Expression is not a method", "expression"); 
} 

使用

var whereMethodInfo = GetMethodInfo(() => Enumerable.Where(Enumerable.Empty<T>(), i=>true)); 

BTW,我建議你下載LINQPad並用它來編寫查詢,看看生成的表達式樹和IL代碼。