动态构造 lambda

  Type type = obj.GetType();
            var property = type.GetProperty(keyName);
            object keyValue = property.GetValue(obj, null);

            //Expression<Func<DataBase.NewsSystem, bool>> filter = x => x.NSiD == "F3A918C0-FC41-4AA2-8A6C-5E4BB4A20EC2";
            var paramExpr = Expression.Parameter(typeof(T), "x");
            MemberExpression namePropExpr = Expression.Property(paramExpr, keyName);
            // 获取表示System.String.Equals方法的System.Reflection.MethodInfo
            MethodInfo EqualsMethod = pk.First().Type.GetMethod("Equals", new Type[] { pk.First().Type });

            // 创建表示value变量值的表达式
            ConstantExpression nameValueExpr = Expression.Constant(keyValue, pk.First().Type);
            // 创建表示name参数的表达式
            MethodCallExpression nameContainsExpr = Expression.Call(namePropExpr, EqualsMethod, nameValueExpr);
            //var paramRight = Expression.Parameter(typeof(string), "F3A918C0");
            //Expression body = Expression.Equal(
            var lambda = Expression.Lambda<Func<T, bool>>(nameContainsExpr, paramExpr);
            var filter = lambda.Compile();

            T updatedObj = Context.GetTable<T>().Single(filter);
            SetValue<T>(ref updatedObj, obj);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值