尽管Linq和Lambda上有很多示例和线程,但我似乎找不到使用fieldname从现有列表中选择单个字段的方法。 我觉得我对这段代码比较接近,但是有一个我不理解的错误:
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();
有任何想法如何完成这项工作? 非常感谢,谢谢。
答案 0 :(得分:1)
如果resultList
的类型为IQueryable<returnEntityType>
并且您正在使用它来构建某种数据库查询,那么您需要向Expression.Lambda
方法添加类型参数:
var projection = Expression.Lambda<Func<returnEntityType, string>>(propertyAccess)
否则,如果它只是一个简单的列表或数组,那么使用Dynamic Linq会更简单:https://github.com/kahanu/System.Linq.Dynamic
答案 1 :(得分:1)
你很亲密。这样的事情应该有效:
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();
}