如何创建Expression <func <object>&gt;来自物业名称

时间:2016-11-23 12:18:51

标签: c# linq linq-expressions

我想创建一个这样的表达式:

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 programaticaly(&#34; Id&#34;在此示例中)。

1 个答案:

答案 0 :(得分:1)

好的,我希望,我终于明白了,你需要什么:)

我建议创建这样的扩展方法:

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();

您必须将实体作为参数。

那些拒绝接受回答的人可以解释一下这是什么。