diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 79b4f74a8..1f4f5d651 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1097,93 +1097,6 @@ - - - 动态创建实体类型 - - - - - 配置Class - - 类名 - 类标记的特性[Table(Name = "xxx")] [Index(xxxx)] - - - - - 获取类型构建器,可作为要构建的Type来引用 - - - - - 配置属性 - - 属性名称 - 属性类型 - 属性标记的特性-支持多个 - - - - - 配置属性 - - 属性名称 - 属性类型 - 该属性是否重写父类属性 - 属性标记的特性-支持多个 - - - - - 配置属性 - - 属性名称 - 属性类型 - 该属性是否重写父类属性 - 属性默认值 - 属性标记的特性-支持多个 - - - - - 配置父类 - - 父类类型 - - - - - Override属性 - - - - - - Emit动态创建出Class - Type - - - - - - Emit动态创建出Class - Type,不附带获取TableInfo - - - - - - 首字母小写 - - - - - - - 首字母大写 - - - - 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 "" @@ -3299,6 +3212,15 @@ 新值 + + + 设置列的新值,SetByPropertyName("Name", "newvalue") + 机制同 ISelect.WhereDynamicFilter/OrderByPropertyName + + + + + 设置列的新值,Set(a => a.Name, "newvalue") @@ -3309,6 +3231,16 @@ 新值 + + + 设置列的新值,SetByPropertyNameIf(true, "Name", "newvalue") + 机制同 ISelect.WhereDynamicFilter/OrderByPropertyName + + true 时生效 + + + + 设置列的新值为基础上增加,格式:Set(a => a.Clicks + 1) 相当于 clicks=clicks+1 @@ -5990,28 +5922,6 @@ 对象池 - - - 动态构建Class Type - - - - - - 根据字典,创建 table 对应的实体对象 - - - - - - - - 根据实体对象,创建 table 对应的字典 - - - - - C#: that >= between && that <= and diff --git a/FreeSql/Interface/Curd/IUpdate.cs b/FreeSql/Interface/Curd/IUpdate.cs index 70e6d8135..ad6e42b87 100644 --- a/FreeSql/Interface/Curd/IUpdate.cs +++ b/FreeSql/Interface/Curd/IUpdate.cs @@ -150,6 +150,14 @@ namespace FreeSql /// IUpdate Set(Expression> column, TMember value); /// + /// 设置列的新值,SetByPropertyName("Name", "newvalue") + /// 机制同 ISelect.WhereDynamicFilter/OrderByPropertyName + /// + /// + /// + /// + IUpdate SetByPropertyName(string column, object value); + /// /// 设置列的新值,Set(a => a.Name, "newvalue") /// /// @@ -159,6 +167,15 @@ namespace FreeSql /// IUpdate SetIf(bool condition, Expression> column, TMember value); /// + /// 设置列的新值,SetByPropertyNameIf(true, "Name", "newvalue") + /// 机制同 ISelect.WhereDynamicFilter/OrderByPropertyName + /// + /// true 时生效 + /// + /// + /// + IUpdate SetByPropertyNameIf(bool condition, string column, object value); + /// /// 设置列的新值为基础上增加,格式:Set(a => a.Clicks + 1) 相当于 clicks=clicks+1 /// /// 指定更新,格式:Set(a => new T { Clicks = a.Clicks + 1, Time = DateTime.Now }) 相当于 set clicks=clicks+1,time='2019-06-19....' diff --git a/FreeSql/Internal/CommonProvider/UpdateProvider.cs b/FreeSql/Internal/CommonProvider/UpdateProvider.cs index 6aa7d3cb0..3ed76d6b0 100644 --- a/FreeSql/Internal/CommonProvider/UpdateProvider.cs +++ b/FreeSql/Internal/CommonProvider/UpdateProvider.cs @@ -672,6 +672,17 @@ namespace FreeSql.Internal.CommonProvider SetPriv(cols.First().Column, value); return this; } + public IUpdate SetByPropertyNameIf(bool condition, string propertyName, object value)=> condition ? SetByPropertyName(propertyName, value) : this; + public IUpdate SetByPropertyName(string propertyName, object value) + { + var alias = "t_" + Guid.NewGuid().ToString("n").Substring(0, 8); + var tempQuery = _orm.Select().AsType(_table.Type).DisableGlobalFilter().As(alias); + tempQuery.WhereDynamicFilter(new DynamicFilterInfo { Field = propertyName, Operator = DynamicFilterOperator.Eq, Value = value }); + var where = (tempQuery as Select0Provider)._where.ToString().Replace(alias + ".", "").Replace(" IS NULL", " = NULL"); + if (where.StartsWith(" AND (")) where = where.Substring(6, where.Length - 7); + _set.Append(", ").Append(where); + return this; + } public IUpdate SetIf(bool condition, Expression> column, TMember value) => condition ? Set(column, value) : this; public IUpdate Set(Expression> exp) {