mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 10:42:52 +08:00
- 优化 IUpdate.Set 表达式传入匿名类更新多个字段;
This commit is contained in:
parent
7460ffffaa
commit
4609c910dd
@ -48,7 +48,6 @@ public abstract class BaseEntity
|
|||||||
{
|
{
|
||||||
var uow = Orm.CreateUnitOfWork();
|
var uow = Orm.CreateUnitOfWork();
|
||||||
uow.IsolationLevel = level;
|
uow.IsolationLevel = level;
|
||||||
UnitOfWork.Current.Value = uow;
|
|
||||||
return uow;
|
return uow;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -404,7 +404,7 @@ namespace FreeSql.Tests
|
|||||||
var tbid = g.sqlite.Select<TaskBuild>().First()?.Id ?? Guid.Empty;
|
var tbid = g.sqlite.Select<TaskBuild>().First()?.Id ?? Guid.Empty;
|
||||||
|
|
||||||
var testarray = new[] { 1, 2, 3 };
|
var testarray = new[] { 1, 2, 3 };
|
||||||
var tbidsql = g.sqlite.Update<TaskBuild>().Where(a => a.Id == tbid)
|
var tbidsql1 = g.sqlite.Update<TaskBuild>().Where(a => a.Id == tbid)
|
||||||
.Set(a => new TaskBuild
|
.Set(a => new TaskBuild
|
||||||
{
|
{
|
||||||
FileName = "111",
|
FileName = "111",
|
||||||
@ -412,6 +412,14 @@ namespace FreeSql.Tests
|
|||||||
OptionsEntity02 = false,
|
OptionsEntity02 = false,
|
||||||
OptionsEntity04 = testarray[0]
|
OptionsEntity04 = testarray[0]
|
||||||
}).ToSql();
|
}).ToSql();
|
||||||
|
var tbidsql2 = g.sqlite.Update<TaskBuild>().Where(a => a.Id == tbid)
|
||||||
|
.Set(a => new
|
||||||
|
{
|
||||||
|
FileName = "111",
|
||||||
|
TaskName = a.TaskName + "333",
|
||||||
|
OptionsEntity02 = false,
|
||||||
|
OptionsEntity04 = testarray[0]
|
||||||
|
}).ToSql();
|
||||||
|
|
||||||
|
|
||||||
var dkdkdkd = g.oracle.Select<Templates>().ToList();
|
var dkdkdkd = g.oracle.Select<Templates>().ToList();
|
||||||
|
@ -1568,7 +1568,7 @@
|
|||||||
<summary>
|
<summary>
|
||||||
设置列的的新值为基础上增加,格式:Set(a => a.Clicks + 1) 相当于 clicks=clicks+1
|
设置列的的新值为基础上增加,格式:Set(a => a.Clicks + 1) 相当于 clicks=clicks+1
|
||||||
<para></para>
|
<para></para>
|
||||||
指定更新,格式:Set(a => new { Clicks = a.Clicks + 1, Time = DateTime.Now }) 相当于 set clicks=clicks+1,time='2019-06-19....'
|
指定更新,格式:Set(a => new T { Clicks = a.Clicks + 1, Time = DateTime.Now }) 相当于 set clicks=clicks+1,time='2019-06-19....'
|
||||||
</summary>
|
</summary>
|
||||||
<typeparam name="TMember"></typeparam>
|
<typeparam name="TMember"></typeparam>
|
||||||
<param name="exp"></param>
|
<param name="exp"></param>
|
||||||
|
@ -77,7 +77,7 @@ namespace FreeSql
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 设置列的的新值为基础上增加,格式:Set(a => a.Clicks + 1) 相当于 clicks=clicks+1
|
/// 设置列的的新值为基础上增加,格式:Set(a => a.Clicks + 1) 相当于 clicks=clicks+1
|
||||||
/// <para></para>
|
/// <para></para>
|
||||||
/// 指定更新,格式:Set(a => new { Clicks = a.Clicks + 1, Time = DateTime.Now }) 相当于 set clicks=clicks+1,time='2019-06-19....'
|
/// 指定更新,格式:Set(a => new T { Clicks = a.Clicks + 1, Time = DateTime.Now }) 相当于 set clicks=clicks+1,time='2019-06-19....'
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="TMember"></typeparam>
|
/// <typeparam name="TMember"></typeparam>
|
||||||
/// <param name="exp"></param>
|
/// <param name="exp"></param>
|
||||||
|
@ -435,29 +435,41 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
{
|
{
|
||||||
var body = exp?.Body;
|
var body = exp?.Body;
|
||||||
var nodeType = body?.NodeType;
|
var nodeType = body?.NodeType;
|
||||||
if (nodeType == ExpressionType.Equal)
|
switch (nodeType)
|
||||||
{
|
{
|
||||||
_set.Append(", ").Append(_commonExpression.ExpressionWhereLambdaNoneForeignObject(null, _table, null, exp, null));
|
case ExpressionType.Equal:
|
||||||
return this;
|
_set.Append(", ").Append(_commonExpression.ExpressionWhereLambdaNoneForeignObject(null, _table, null, exp, null));
|
||||||
}
|
return this;
|
||||||
|
case ExpressionType.MemberInit:
|
||||||
if (nodeType == ExpressionType.MemberInit)
|
var initExp = body as MemberInitExpression;
|
||||||
{
|
if (initExp.Bindings?.Count > 0)
|
||||||
var initExp = body as MemberInitExpression;
|
|
||||||
if (initExp.Bindings?.Count > 0)
|
|
||||||
{
|
|
||||||
for (var a = 0; a < initExp.Bindings.Count; a++)
|
|
||||||
{
|
{
|
||||||
var initAssignExp = (initExp.Bindings[a] as MemberAssignment);
|
for (var a = 0; a < initExp.Bindings.Count; a++)
|
||||||
if (initAssignExp == null) continue;
|
{
|
||||||
var memberName = initExp.Bindings[a].Member.Name;
|
var initAssignExp = (initExp.Bindings[a] as MemberAssignment);
|
||||||
if (_table.ColumnsByCsIgnore.ContainsKey(memberName)) continue;
|
if (initAssignExp == null) continue;
|
||||||
if (_table.ColumnsByCs.TryGetValue(memberName, out var col) == false) throw new Exception($"找不到属性:{memberName}");
|
var memberName = initExp.Bindings[a].Member.Name;
|
||||||
var memberValue = _commonExpression.ExpressionLambdaToSql(initAssignExp.Expression, new CommonExpression.ExpTSC { });
|
if (_table.ColumnsByCsIgnore.ContainsKey(memberName)) continue;
|
||||||
_setIncr.Append(", ").Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ").Append(memberValue);
|
if (_table.ColumnsByCs.TryGetValue(memberName, out var col) == false) throw new Exception($"找不到属性:{memberName}");
|
||||||
|
var memberValue = _commonExpression.ExpressionLambdaToSql(initAssignExp.Expression, new CommonExpression.ExpTSC { });
|
||||||
|
_setIncr.Append(", ").Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ").Append(memberValue);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
return this;
|
||||||
return this;
|
case ExpressionType.New:
|
||||||
|
var newExp = body as NewExpression;
|
||||||
|
if (newExp.Members?.Count > 0)
|
||||||
|
{
|
||||||
|
for (var a = 0; a < newExp.Members.Count; a++)
|
||||||
|
{
|
||||||
|
var memberName = newExp.Members[a].Name;
|
||||||
|
if (_table.ColumnsByCsIgnore.ContainsKey(memberName)) continue;
|
||||||
|
if (_table.ColumnsByCs.TryGetValue(memberName, out var col) == false) throw new Exception($"找不到属性:{memberName}");
|
||||||
|
var memberValue = _commonExpression.ExpressionLambdaToSql(newExp.Arguments[a], new CommonExpression.ExpTSC { });
|
||||||
|
_setIncr.Append(", ").Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ").Append(memberValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
if (body is BinaryExpression == false &&
|
if (body is BinaryExpression == false &&
|
||||||
nodeType != ExpressionType.Call) return this;
|
nodeType != ExpressionType.Call) return this;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user