C#成员表达式Func <T,object>转换为Func <T,bool> MethodBinaryExpression

乔尔·哈克斯

是否可以将成员epxression和对象一起转换为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);
        }
    }
格伦迪

您可以创建新的表达式

model=>model.property == object.property

public static void SaveBy<T, TProp>(this IDbConnection db, T obj, Expression<Func<T, TProp>> exp) where T : new()
{
    var memberExp = (MemberExpression)exp.Body;
    var objPropExp = Expression.PropertyOrField(Expression.Constant(obj), memberExp.Member.Name);
    var equalExp = Expression.Equal(exp.Body, objPropExp);
    var exp2 = Expression.Lambda<Func<T, bool>>(equalExp, exp.Parameters);
    //exp2 = {model => (model.prop == value(object).prop)}

    if (db.Update(obj, exp2) <= 0)
    {
        db.Insert(obj);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将表达式转换为Expression <Func <T,bool >>

来自分类Dev

如何将Expression <Func <T,object >>转换为Expression <Func <T,bool >>?

来自分类Dev

将谓词<T>转换为Func <T,bool>

来自分类Dev

将Expression <Func <T,bool >>转换为Expression <Func <T1,bool >>,以便T是T1的成员

来自分类Dev

如何将 BinaryExpression 转换为 Expression<Func<T, bool>>?

来自分类Dev

是否可以将Expression <Func <T,bool >>转换为Expression <Func <MyType,bool >>?

来自分类Dev

如何在C#中将LambdaExpression转换为Expression <Func <T,bool >>

来自分类Dev

无法将lambda表达式转换为委托类型'System.Func <T,TKey>'

来自分类Dev

无法将lambda表达式转换为委托类型'System.Func <T,TKey>'

来自分类Dev

在 lambda 表达式中将 Func<T, IConvertible> 的结果转换为 int

来自分类Dev

将Func <T,TProperty>转换为Expression <Func <T,Property >>

来自分类Dev

无法从 `Expression<Func<T1, T2>>` 转换为 `Expression<Func<object, object>>`

来自分类Dev

如何将IQueryable <T>转换为Expression <Func <T,bool >>?

来自分类Dev

将Expression <Func <T,TProperty >>转换为Expression <Func <object,object >>,反之亦然

来自分类Dev

如何将Func <T,object>转换为Func <Exception,object>

来自分类Dev

如何将Func <T,object>转换为Func <Exception,object>

来自分类Dev

C# 如何为对象的每个属性构建表达式<Func<T, U>>?

来自分类Dev

如何将简单的视图模型转换为Func <T,bool>谓词?

来自分类Dev

表达式<Func <T,Boolean >> VS Func <T,Boolean>

来自分类Dev

无法从“oncurrentBag<T>”转换为“Func<ConcurrentBag<T>>”

来自分类Dev

C#生成表达式<Func <Foo,object >>

来自分类Dev

ConcurrentDictionary-将addValueFactory(Func <string,T,T>)转换为updateValueFactory(Func <string,T,T>)?

来自分类Dev

具有约束条件的Moq表达式... It.Is <Expression <Func <T,bool >>>

来自分类Dev

遍历&&或||之间的每个参数 在Expressions <Func <T,Bool >> Lambda表达式中

来自分类Dev

将Expression <Func <T1 >>转换为Expression <Func <T1,T2 >>

来自分类Dev

方法的隐式转换为Func <T,Tresult>

来自分类Dev

无法将OrderBy(Func <T,IComperable>)转换为SQL

来自分类Dev

方法重载中的 Expression<Func<T,bool>> 与 Func<T,bool>

来自分类Dev

无法将lambda表达式转换为委托类型'System.Func <char,bool>'

Related 相关文章

  1. 1

    将表达式转换为Expression <Func <T,bool >>

  2. 2

    如何将Expression <Func <T,object >>转换为Expression <Func <T,bool >>?

  3. 3

    将谓词<T>转换为Func <T,bool>

  4. 4

    将Expression <Func <T,bool >>转换为Expression <Func <T1,bool >>,以便T是T1的成员

  5. 5

    如何将 BinaryExpression 转换为 Expression<Func<T, bool>>?

  6. 6

    是否可以将Expression <Func <T,bool >>转换为Expression <Func <MyType,bool >>?

  7. 7

    如何在C#中将LambdaExpression转换为Expression <Func <T,bool >>

  8. 8

    无法将lambda表达式转换为委托类型'System.Func <T,TKey>'

  9. 9

    无法将lambda表达式转换为委托类型'System.Func <T,TKey>'

  10. 10

    在 lambda 表达式中将 Func<T, IConvertible> 的结果转换为 int

  11. 11

    将Func <T,TProperty>转换为Expression <Func <T,Property >>

  12. 12

    无法从 `Expression<Func<T1, T2>>` 转换为 `Expression<Func<object, object>>`

  13. 13

    如何将IQueryable <T>转换为Expression <Func <T,bool >>?

  14. 14

    将Expression <Func <T,TProperty >>转换为Expression <Func <object,object >>,反之亦然

  15. 15

    如何将Func <T,object>转换为Func <Exception,object>

  16. 16

    如何将Func <T,object>转换为Func <Exception,object>

  17. 17

    C# 如何为对象的每个属性构建表达式<Func<T, U>>?

  18. 18

    如何将简单的视图模型转换为Func <T,bool>谓词?

  19. 19

    表达式<Func <T,Boolean >> VS Func <T,Boolean>

  20. 20

    无法从“oncurrentBag<T>”转换为“Func<ConcurrentBag<T>>”

  21. 21

    C#生成表达式<Func <Foo,object >>

  22. 22

    ConcurrentDictionary-将addValueFactory(Func <string,T,T>)转换为updateValueFactory(Func <string,T,T>)?

  23. 23

    具有约束条件的Moq表达式... It.Is <Expression <Func <T,bool >>>

  24. 24

    遍历&&或||之间的每个参数 在Expressions <Func <T,Bool >> Lambda表达式中

  25. 25

    将Expression <Func <T1 >>转换为Expression <Func <T1,T2 >>

  26. 26

    方法的隐式转换为Func <T,Tresult>

  27. 27

    无法将OrderBy(Func <T,IComperable>)转换为SQL

  28. 28

    方法重载中的 Expression<Func<T,bool>> 与 Func<T,bool>

  29. 29

    无法将lambda表达式转换为委托类型'System.Func <char,bool>'

热门标签

归档