linq - SelectList 扩展 - 情侣表达式

标签 linq lambda

所以我有了一个疯狂的想法,我可以让一些很酷的东西发挥作用。我厌倦了 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/

相关文章:

c# - 组合来自多个列表的信息

c# - 按列分组并使用 Linq 获取组的第一条记录

c# - 无法将其转换为 VB.net

c# - 如何强制我的 lambda 表达式提前求值?修复 lambda 表达式的怪异问题?

Python - 按不均匀列表对元组列表进行排序

c# Linq 对象子查询/输入

c# - linq中的动态属性名称

lambda - lambda 树与可区分联合树

c# - Lambda 解释和它是什么以及一个很好的例子

java - 像分组列表一样的 SQL 连接