private Expression ConvertMethodReference(IType expectedType, Expression argument) { var expectedCallable = expectedType as ICallableType; if (expectedCallable != null) { var argumentType = (ICallableType)GetExpressionType(argument); var expectedSig = expectedCallable.GetSignature(); var argSig = argumentType.GetSignature(); if (argSig != expectedSig) { if (TypeSystemServices.CompatibleSignatures(argSig, expectedSig) || (TypeSystemServices.CompatibleGenericSignatures(argSig, expectedSig) /*&& IsUnspecializedGenericMethodReference(argument)*/) ) { argument.ExpressionType = expectedType; return(CreateDelegate(expectedType, argument)); } return(Adapt(expectedCallable, CreateDelegate(GetConcreteExpressionType(argument), argument))); } return(CreateDelegate(expectedType, argument)); } return(CreateDelegate(GetConcreteExpressionType(argument), argument)); }