【发布时间】:2015-12-03 13:11:20
【问题描述】:
是否可以将成员表达式与对象一起转换为c#中的方法二进制表达式?
到目前为止我尝试过的:
public static void SaveBy<T>(this IDbConnection db, T obj, Expression<Func<T, object>> exp) where T : new()
{
var com = exp.Compile();
if (db.Update(obj, e => exp == com.Invoke(obj)) <= 0)
{
db.Insert(obj);
}
}
public static void UpdateBy<T>(this IDbConnection db, T obj, Expression<Func<T, bool>> exp) where T : new()
{
db.Update(obj, exp);
}
我想要实现的是创建一个可以调用的方法
x.SaveBy(object,model=>model.property)
它将调用 x.Update,将 MemberExpression 转换为 methodBinaryExpression,如下所示:
x.Update(object, model=>model.property == object.property);
半途而废
public static void SaveBy<T>(this IDbConnection db, T obj, Expression<Func<T, object>> exp) where T : new()
{
var result = exp.Compile().Invoke(obj);
var exp2 = Expression.Lambda<Func<T, bool>>(Expression.Equal(exp.Body, Expression.Constant(result)), exp.Parameters);
if (db.Update(obj, exp2) <= 0)
{
db.Insert(obj);
}
}
【问题讨论】:
-
您想从 SaveBy 调用 Update 吗?你所说的“转换”是什么意思?
-
是的,我想在 SaveBy 方法中调用 Update
标签: c# lambda expression servicestack