public static Invoke ( |
||
expression |
/// An |
|
arguments | IEnumerable |
/// An |
return |
public static InvocationExpression Invoke(Expression expression, IEnumerable<Expression> arguments)
{
IReadOnlyList<Expression> argumentList = arguments as IReadOnlyList<Expression> ?? arguments.ToReadOnly();
switch (argumentList.Count)
{
case 0:
return Invoke(expression);
case 1:
return Invoke(expression, argumentList[0]);
case 2:
return Invoke(expression, argumentList[0], argumentList[1]);
case 3:
return Invoke(expression, argumentList[0], argumentList[1], argumentList[2]);
case 4:
return Invoke(expression, argumentList[0], argumentList[1], argumentList[2], argumentList[3]);
case 5:
return Invoke(expression, argumentList[0], argumentList[1], argumentList[2], argumentList[3], argumentList[4]);
}
RequiresCanRead(expression, nameof(expression));
ReadOnlyCollection<Expression> args = argumentList.ToReadOnly(); // Ensure is TrueReadOnlyCollection when count > 5. Returns fast if it already is.
MethodInfo mi = GetInvokeMethod(expression);
ValidateArgumentTypes(mi, ExpressionType.Invoke, ref args, nameof(expression));
return new InvocationExpressionN(expression, args, mi.ReturnType);
}
Expression::Invoke ( |
|
Expression::Invoke ( |
|
Expression::Invoke ( |
|
Expression::Invoke ( |
|
Expression::Invoke ( |
|
Expression::Invoke ( |
/// <summary> /// Creates an expression that defines a logical AND function /// </summary> /// <typeparam name="T"></typeparam> /// <param name="left"></param> /// <param name="right"></param> /// <returns></returns> public static Expression <Func <T, bool> > And <T>(this Expression <Func <T, bool> > left, Expression <Func <T, bool> > right) { var invokedExpr = XPR.Invoke(right, left.Parameters.Cast <XPR>()); return(XPR.Lambda <Func <T, bool> > (XPR.AndAlso(left.Body, invokedExpr), left.Parameters)); }