/// <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; }