C# 如何创建表达式<;Func<;对象>&燃气轮机;从属性名开始

C# 如何创建表达式<;Func<;对象>&燃气轮机;从属性名开始,c#,linq,linq-expressions,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" 公共类实体 { 公共虚拟长Id{get;set;} } 实体别名=null; 表

我想创建如下表达式:

public class Entity
{        
    public virtual long Id { get; set; }
}

Entity alias = null;
Expression<Func<object>> target = () => alias.Id;//have to be created from "Id"
公共类实体
{        
公共虚拟长Id{get;set;}
}
实体别名=null;
表达式目标=()=>alias.Id//必须从“Id”创建

我的问题是如何以编程方式创建
表达式目标,其中包含属性名为字符串(本例中为“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;
    }
}
您必须将实体作为参数


否决接受答案的人可以解释问题所在。

您是否尝试过基于反射的工厂?看看。
表达式是您想要的吗?
实体
来自应用程序(不是表达式的输入),其
Id
属性是
long
而不是
对象
表达式是否更有用?例如:
expressiontarget=a=>a.Id我确实想使用表达式树,但我只开始使用它们为什么不简单地使用
名称(Entity.Id)
?谢谢,但我确实需要
表达式
,因为我想将它传递给另一个只能接受
表达式的方法(它是NHibernate的别名方法)抱歉,但是我不需要
Expression
而是
Expression
。就像这样:
()=>alias.Id
如果这是所需的方法,您可以将
此实体
替换为
此T源
,以使此方法可用于所有类型的对象。非常感谢。这正是我需要的!
var entity = new Entity { Id = 4711 };
var expression = entity.ToExpression("Id");
var result = expression.Compile().DynamicInvoke();