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);