使用字段名作为字符串从现有列表中选择单列作为列表

本文关键字:列表 单列作 选择 字符串 字段 | 更新日期: 2023-09-27 18:20:57

尽管Linq和Lambda上有很多例子和线程,但我似乎找不到使用字段名从现有列表中选择单个字段的方法。我想我已经比较接近这个代码了,但有一个错误我不明白:

           var parameter = Expression.Parameter(typeof(returnEntityType), "item");
           var propertyAccess = Expression.Property(parameter, vi.BRONVELD);
           var projection = Expression.Lambda(propertyAccess, parameter);
           var test = resultList.Select<returnEntityType, string>(projection).ToList();

有人知道怎么做吗?非常感谢,谢谢。

使用字段名作为字符串从现有列表中选择单列作为列表

如果resultList的类型是IQueryable<returnEntityType>,并且您正在使用它来构造某种数据库查询,那么您需要向Expression.Lambda方法添加类型参数:

var projection = Expression.Lambda<Func<returnEntityType, string>>(propertyAccess)

否则,如果它只是一个简单的列表或数组,那么使用Dynamic Linq会简单得多:https://github.com/kahanu/System.Linq.Dynamic

你的成绩很好。这样的东西应该有效:

    class Class
    {
        public string A { get; set; }
        public string B { get; set; }
    }
    static Func<Class, string> GetLambda()
    {
        var parameter = Expression.Parameter(typeof(Class), "item");
        var property = Expression.Property(parameter, "A");
        var projection = Expression.Lambda<Func<Class, string>>(property, parameter);
        return projection.Compile();
    }
    static void Main(string[] args)
    {
        List<Class> list = new List<Class>();
        list.Add(new Class() { A = "class1-a", B = "class1-b" });
        list.Add(new Class() { A = "class2-a", B = "class2-b" });
        var select = list.Select(GetLambda()).ToList();
    }