Вы после чего-то вроде этого?
public static IHtmlString DropDowntListFor<TModel>
(this HtmlHelper htmlHelper, IList<TModel> list,
Expression<Func<TModel, string>> valueSelector,
Expression<Func<TModel, string>> textSelector)
{
var dropdownName = valueSelector.Parameters.First().Name;
Func<TModel, string> compiledValueSelector = valueSelector.Compile();
Func<TModel, string> compiledTextSelector = textSelector.Compile();
var selectedListItem = list.Select(x => new SelectListItem {
Value = compiledValueSelector(x),
Text = compiledTextSelector(x) })
.ToList();
return htmlHelper.DropDownList(dropdownName, selectedListItem);
}
Обратите внимание, что если вам не нужен текстовый селектор в качестве дерева выражений, вы можете немного упростить его:
public static IHtmlString DropDowntListFor<TModel>
(this HtmlHelper htmlHelper, IList<TModel> list,
Expression<Func<TModel, string>> valueSelectorExpression,
Func<TModel, string> textSelector)
{
var dropdownName = valueSelector.Parameters.First().Name;
var valueSelector = valueSelectorExpression.Compile();
var selectedListItem = list.Select(x => new SelectListItem {
Value = valueSelector(x),
Text = textSelector(x) })
.ToList();
return htmlHelper.DropDownList(dropdownName, selectedListItem);
}