private static MvcHtmlString selectListFor <TPageModel, TProperty, TSourceDataModel> ( HtmlHelper <TPageModel> html, Expression <Func <TPageModel, TProperty> > propertyExpression, Expression <Func <TPageModel, TSourceDataModel> > sourceEntityExpression, string bindValuePropertyName, string bindTextPropertyName, Expression <Func <TSourceDataModel, bool> > filter, Func <IQueryable <TSourceDataModel>, IOrderedQueryable <TSourceDataModel> > orderBy, bool insertDefaultOption, string defaultOptionText, string defaultOptionValue ) where TSourceDataModel : class { PropertyInfo valueProperty = SelectListHelper.GetSelectListValuePropertyInfo(typeof(TSourceDataModel), bindValuePropertyName); PropertyInfo textProperty = SelectListHelper.GetSelectListTextPropertyInfo(typeof(TSourceDataModel), bindTextPropertyName); ModelMetadata metadata = ModelMetadata.FromLambdaExpression <TPageModel, TProperty>(propertyExpression, html.ViewData); string value = (metadata.Model == null ? "0" : metadata.Model.ToString()); List <SelectListItem> list = SelectListHelper.GetSelectListItems <TSourceDataModel>(valueProperty, textProperty, value, filter, orderBy); if (insertDefaultOption) { list.Insert(0, new SelectListItem { Text = defaultOptionText, Value = defaultOptionValue }); } return(html.DropDownListFor(propertyExpression, list)); }