ModelMetadata.FromLambdaExpression(propertyExpression, html.ViewData);
This is what you are looking for. Unfortunately, this means that html must be an instance of HtmlHelper from a view whose model is the type you're trying to get the metadata for.
I think that's because it wants to take the property values from the Model/ViewData and pass it by the ModelMetadataProvider to allow it to to populate metadata specific to the model instance in question.
If you don't care about instance-specific metadata (eg: only want data annotation attributes) and so on, then just pass it a new ViewDataDictionary (where TModel is the type whose metadata you want to get).
For bonus feel-good points, the FromLambdaExpression method caches expressions and their resolved property paths inside it to give better performance.
Hope that helps you.