我有一堂课
public class User
{
public string Name { get; set; }
public int Age { get; set; }
}
现在我要生成一个列表:
List<Expression<Func<User, object>>> selectorExpressions = /* ... */
该列表应该包含与该示例lambdas匹配的每个属性的选择器表达式:
user => user.Name;
user => user.Age;
/* etc... */
最简单的方法是什么?
EDIT :要澄清:我想为类中的每个属性生成此列表,例如像这样的东西:
List<Expression<Func<User, object>>> selectorExpressions = Util.GetSelectorsForEveryProperty<User>();
我不想为我需要的每个属性手动编写lambda。
答案 0 :(得分:3)
您可以通过反射和动态表达式创建来实现:
var selectorExpressions = new List<Expression<Func<User, object>>>();
foreach (var prop in typeof(User).GetProperties())
{
var arg = Expression.Parameter(typeof(User), "x");
var property = Expression.Property(arg, prop.Name);
var cast = Expression.Convert(property, typeof(object));
var expr = Expression.Lambda<Func<User, object>>(cast, arg);
selectorExpressions.Add(expr);
}