IsSupportedMethod() public abstract method

Determines whether the expression represents a supported method call.
public abstract IsSupportedMethod ( MethodCallExpression expression ) : BindingSignatureSupport
expression System.Linq.Expressions.MethodCallExpression The expression.
return BindingSignatureSupport
コード例 #1
0
        /// <summary>
        /// Gets a <see cref="BindingSignatureSupport"/> from an expression.
        /// </summary>
        /// <param name="left">The left.</param>
        /// <param name="structureBinder">The structure binder.</param>
        /// <returns></returns>
        /// <remarks></remarks>
        private static BindingSignatureSupport GetBindingSupport(Expression left, AbstractQueryStructureBinder structureBinder)
        {
            Func<MethodCallExpression, BindingSignatureSupport>
                getMethodSupport = x => ExpressionHelper.IsMethod(x) ? structureBinder.IsSupportedMethod(x) : null;

            Func<MemberExpression, BindingSignatureSupport>
                getMemberSupport = x => ExpressionHelper.IsMember(x) ? structureBinder.IsSupportedMember(x) : null;

            var supportedNonDynamic = getMemberSupport.Invoke(left as MemberExpression) ?? getMethodSupport.Invoke(left as MethodCallExpression);

            if (supportedNonDynamic == null)
            {
                var unary = left as UnaryExpression;
                if (unary != null)
                {
                    var innerMethod = unary.Operand as MethodCallExpression;
                    if (innerMethod != null)
                        return getMethodSupport.Invoke(innerMethod);
                }
            }

            return supportedNonDynamic;
        }