2
我首先會顯示一個完全正常的同類不使用表達式樹:如何使用閉包對象作爲參數來創建調用(或與之結合)另一個表達式的表達式?
public class ClassUsingFuncs
{
public SomeClass SomeProperty { get; set; }
public void DoSomethingUsingFuncWithoutArgument(Func<bool> funcWithoutArgument)
{
}
public void DoSomethingUsingFuncWithArgument(Func<SomeClass, bool> funcWithArgument)
{
Func<bool> funcWithoutArgument =() => funcWithArgument(SomeProperty);
DoSomethingUsingFuncWithoutArgument(funcWithoutArgument);
}
}
使用表達式樹時,我該如何實現這個等價?如果我需要LINQKit或其他庫來實現這一點,這沒有任何問題。
public class ClassUsingExpressionTrees
{
public SomeClass SomeProperty { get; set; }
public void DoSomethingUsingExpressionWithoutArgument(Expression<Func<bool>> expressionWithoutArgument)
{
}
public void DoSomethingUsingExpressionWithArgument(Expression<Func<SomeClass, bool>> expressionWithArgument)
{
Expression<Func<bool>> expressionWithoutArgument = ?
DoSomethingUsingExpressionWithoutArgument(expressionWithoutArgument);
}
}
非常感謝!我看着Expression.Invoke,但我沒有考慮Expression.Constant(因爲它不是一個常量,至少不是從C#的角度來看)。你碰巧知道一本關於表達樹的更好的書或鏈接? – lightbricko