使用字段名作为字符串从现有列表中选择单列作为列表
本文关键字:列表 单列作 选择 字符串 字段 | 更新日期: 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();
}