如何从 属性 名称创建表达式<Func<object>>
How to create Expression<Func<object>> from property name
我想创建这样的表达式:
public class Entity
{
public virtual long Id { get; set; }
}
Entity alias = null;
Expression<Func<object>> target = () => alias.Id;//have to be created from "Id"
我的问题是如何以编程方式创建 Expression<Func<object>> target
具有名称为 属性 的字符串(在此示例中为 "Id")。
好的,我希望,我终于明白了,你需要什么:)
我建议创建这样的扩展方法:
public static class EntityExtensions
{
public static Expression<Func<object>> ToExpression(this Entity entity, string property)
{
var constant = Expression.Constant(entity);
var memberExpression = Expression.Property(constant, property);
Expression convertExpr = Expression.Convert(memberExpression, typeof(object));
var expression = Expression.Lambda(convertExpr);
return (Expression<Func<object>>)expression;
}
}
然后这样称呼它:
var entity = new Entity { Id = 4711 };
var expression = entity.ToExpression("Id");
var result = expression.Compile().DynamicInvoke();
你必须给实体作为参数。
投票接受答案的人可以解释一下,问题是什么。
我想创建这样的表达式:
public class Entity
{
public virtual long Id { get; set; }
}
Entity alias = null;
Expression<Func<object>> target = () => alias.Id;//have to be created from "Id"
我的问题是如何以编程方式创建 Expression<Func<object>> target
具有名称为 属性 的字符串(在此示例中为 "Id")。
好的,我希望,我终于明白了,你需要什么:)
我建议创建这样的扩展方法:
public static class EntityExtensions
{
public static Expression<Func<object>> ToExpression(this Entity entity, string property)
{
var constant = Expression.Constant(entity);
var memberExpression = Expression.Property(constant, property);
Expression convertExpr = Expression.Convert(memberExpression, typeof(object));
var expression = Expression.Lambda(convertExpr);
return (Expression<Func<object>>)expression;
}
}
然后这样称呼它:
var entity = new Entity { Id = 4711 };
var expression = entity.ToExpression("Id");
var result = expression.Compile().DynamicInvoke();
你必须给实体作为参数。
投票接受答案的人可以解释一下,问题是什么。