Code optimization

This commit is contained in:
sunkaixuan
2017-11-22 18:51:40 +08:00
parent c79d2b3cf8
commit d861bca078
2 changed files with 38 additions and 11 deletions

View File

@@ -64,7 +64,13 @@ namespace OrmTest.Demo
t12.Wait(); t12.Wait();
//update one columns //update one columns
var count= db.Updateable<Student>().UpdateColumns(it => it.SchoolId == 1).Where(it => it.Id == 1).ExecuteCommand(); var count = db.Updateable<Student>().UpdateColumns(it => it.SchoolId == 1).Where(it => it.Id == 1).ExecuteCommand();
var t13 = db.Updateable<Student>().UpdateColumns(it => new Student() {
SchoolId = SqlFunc.Subqueryable<School>().Where(s=>s.Id==it.SchoolId).Select(s=>s.Id),
Name="newname"
}).Where(it => it.Id == 1).ExecuteCommand();
} }
} }
} }

View File

@@ -48,7 +48,7 @@ namespace SqlSugar
} }
MemberAssignment memberAssignment = (MemberAssignment)binding; MemberAssignment memberAssignment = (MemberAssignment)binding;
var type = memberAssignment.Member.ReflectedType; var type = memberAssignment.Member.ReflectedType;
var memberName =this.Context.GetDbColumnName(type.Name, memberAssignment.Member.Name); var memberName = this.Context.GetDbColumnName(type.Name, memberAssignment.Member.Name);
var item = memberAssignment.Expression; var item = memberAssignment.Expression;
if ((item is MemberExpression) && ((MemberExpression)item).Expression == null) if ((item is MemberExpression) && ((MemberExpression)item).Expression == null)
{ {
@@ -56,21 +56,20 @@ namespace SqlSugar
string parameterName = AppendParameter(paramterValue); string parameterName = AppendParameter(paramterValue);
this.Context.Result.Append(base.Context.GetEqString(memberName, parameterName)); this.Context.Result.Append(base.Context.GetEqString(memberName, parameterName));
} }
else if (item is UnaryExpression || item.NodeType == ExpressionType.Constant || (item is MemberExpression) && ((MemberExpression)item).Expression.NodeType == ExpressionType.Constant) else if (IsMethod(item))
{
item = (item as UnaryExpression).Operand;
MethodCall(parameter, memberName, item);
}
else if (IsConst(item))
{ {
base.Expression = item; base.Expression = item;
base.Start(); base.Start();
string parameterName = this.Context.SqlParameterKeyWord + ExpressionConst.Const+ this.Context.ParameterIndex; string parameterName = this.Context.SqlParameterKeyWord + ExpressionConst.Const + this.Context.ParameterIndex;
parameter.Context.Result.Append(base.Context.GetEqString(memberName, parameterName)); parameter.Context.Result.Append(base.Context.GetEqString(memberName, parameterName));
this.Context.Parameters.Add(new SugarParameter(parameterName, parameter.CommonTempData)); this.Context.Parameters.Add(new SugarParameter(parameterName, parameter.CommonTempData));
this.Context.ParameterIndex++; this.Context.ParameterIndex++;
} }
else if (item is MethodCallExpression)
{
base.Expression = item;
base.Start();
parameter.Context.Result.Append(base.Context.GetEqString(memberName, parameter.CommonTempData.ObjToString()));
}
else if (item is MemberExpression) else if (item is MemberExpression)
{ {
if (base.Context.Result.IsLockCurrentParameter == false) if (base.Context.Result.IsLockCurrentParameter == false)
@@ -87,12 +86,29 @@ namespace SqlSugar
} }
else if (item is BinaryExpression) else if (item is BinaryExpression)
{ {
var result=GetNewExpressionValue(item); var result = GetNewExpressionValue(item);
this.Context.Result.Append(base.Context.GetEqString(memberName, result)); this.Context.Result.Append(base.Context.GetEqString(memberName, result));
} }
} }
} }
private static bool IsConst(Expression item)
{
return item is UnaryExpression || item.NodeType == ExpressionType.Constant || (item is MemberExpression) && ((MemberExpression)item).Expression.NodeType == ExpressionType.Constant;
}
private static bool IsMethod(Expression item)
{
return item is MethodCallExpression || (item is UnaryExpression && (item as UnaryExpression).Operand is MethodCallExpression);
}
private void MethodCall(ExpressionParameter parameter, string memberName, Expression item)
{
base.Expression = item;
base.Start();
parameter.Context.Result.Append(base.Context.GetEqString(memberName, parameter.CommonTempData.ObjToString()));
}
private void Select(MemberInitExpression expression, ExpressionParameter parameter, bool isSingle) private void Select(MemberInitExpression expression, ExpressionParameter parameter, bool isSingle)
{ {
foreach (MemberBinding binding in expression.Bindings) foreach (MemberBinding binding in expression.Bindings)
@@ -107,5 +123,10 @@ namespace SqlSugar
ResolveNewExpressions(parameter, item, memberName); ResolveNewExpressions(parameter, item, memberName);
} }
} }
private bool IsSubMethod(MethodCallExpression express, string methodName)
{
return SubTools.SubItemsConst.Any(it => it.Name == methodName) && express.Object != null && express.Object.Type.Name == "Subqueryable`1";
}
} }
} }