NHibernate UpdateBuilder.通过propery info c#设置create lambda表达式



我想根据属性信息创建通用lambda表达式

var pInfo = typeof(User).GetProperty("Counter");
var parameter = Expression.Parameter(typeof(User), @"source");
var property = Expression.Property(parameter, pInfo);
var lambda = Expression.Lambda<Func<User, object>>(property, parameter); // this line 
//should be created according to the property type
//Expression.Lambda<Func<User, int>>
//Expression.Lambda<Func<User, string>>
//Expression.Lambda<Func<User, bool>>
//update fields in db nhibernate
updateBuilder.Set(lambda, Convert.ChangeType(pu.Value, pInfo.PropertyType, null));

当类型未知时,有没有一种方法可以创建lambda表达式,而每个属性都没有if语法?

谢谢

好吧,我不能100%确定你到底想做什么,也许你应该编辑这个问题来详细解释。

但是,下面的函数将以字符串的形式从属性名称中为您提供泛型lambda。您可以轻松地从属性信息中提取字符串名称。希望这对你有帮助。

public static Expression<Func<TEntity, object>> GetLambdaFromString<TEntity>(string property) where TEntity : BaseEntity
{
var x = System.Linq.Expressions.Expression.Parameter(typeof(TEntity), "x");
var body = System.Linq.Expressions.Expression.Convert
(
System.Linq.Expressions.Expression.Property(x, property), typeof(object)
);
var lambda = System.Linq.Expressions.Expression.Lambda<Func<TEntity, object>>(body, x);
return lambda;
}

相关内容

最新更新