所以我有了一个疯狂的想法,我可以让一些很酷的东西发挥作用。我厌倦了 new selectlist(item, "blah", "blahblah") 所以我开始编写一个扩展方法(试图使其类型更强),像这样......
var selectList = projects.ToSelectList(p =>p.ProjectID, p =>p.ProjectName);
扩展方法有点像这样
public static SelectList ToSelectList<T>(this IEnumerable<T> item,
Expression<Func<T, string>> textName,
Expression<Func<T, string>> valueProperty)
{
//do cool stuff
return new SelectList(items, dataTextField, dataValueField);
}
我需要获取的是反射属性,这样我就可以获取值并获取名称。关于我如何做到这一点有什么想法吗?有什么想法可以做得更好/更容易吗?我以前曾经这样做过,但我一辈子都不记得我是怎么做到的。
编辑这需要一些澄清。我复制了一些正在运行且未完善的代码,因此我更新了该代码以反射(reflect)更正确的标准。
最佳答案
我不明白为什么你必须使用反射来做到这一点。
public static SelectList ToSelectListItem<T>(this IEnumerable<T> items,
Func<T, string> textName, Func<T, string> valueProperty) {
{
return new SelectList(items
.Select(i => new SelectListItem {Text = textName(i), Value = valueProperty(i)}));
}
}
应该可以,但我当前计算机上没有 MVC dll。
关于linq - SelectList 扩展 - 情侣表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3525779/