Update exp to sql

This commit is contained in:
sunkaixuan 2019-05-28 15:31:18 +08:00
parent 5b481ce909
commit eaa4472274
5 changed files with 56 additions and 16 deletions

View File

@ -11,14 +11,14 @@ namespace OrmTest
// OldTestMain.Init();
//Demo
Demo0_SqlSugarClient.Init();
Demo1_Queryable.Init();
Demo2_Updateable.Init();
Democ_GobalFilter.Init();
DemoD_DbFirst.Init();
DemoE_CodeFirst.Init();
Demo5_SqlQueryable.Init();
Demo6_Queue.Init();
//Demo0_SqlSugarClient.Init();
//Demo1_Queryable.Init();
//Demo2_Updateable.Init();
//Democ_GobalFilter.Init();
//DemoD_DbFirst.Init();
//DemoE_CodeFirst.Init();
//Demo5_SqlQueryable.Init();
//Demo6_Queue.Init();
//Unit test
NewUnitTest.Init();

View File

@ -15,9 +15,19 @@ namespace OrmTest
Db.DbMaintenance.TruncateTable<SYS_USER>();
Db.Insertable(new SYS_USER() { USER_ID=1,USER_ACCOUNT = "a", USER_PWD = "b", USER_NAME = "c", PWD_LASTCHTIME = DateTime.Now, PWD_ERRORCOUNT = 1, PWD_LASTERRTIME = DateTime.Now }).ExecuteCommand();
Db.Updateable(new SYS_USER() { USER_ID=1, PWD_LASTERRTIME = null }).WhereColumns(it=> new{ it.PWD_ERRORCOUNT, it.PWD_LASTERRTIME }).ExecuteCommand();
Db.CodeFirst.InitTables(typeof(BoolTest));
var x = new BoolTest();
Db.Updateable<BoolTest>().SetColumns(it => new BoolTest() { BoolValue = !it.BoolValue }).Where(it=>it.Id==1).ExecuteCommand();
Db.Updateable<BoolTest>().SetColumns(it => it.BoolValue == !it.BoolValue ).Where(it=>it.Id==1).ExecuteCommand();
}
}
public class BoolTest
{
public int Id { get; set; }
public bool BoolValue { get; set; }
}
/// <summary>
/// 普通用户表
/// </summary>

View File

@ -491,6 +491,15 @@ namespace SqlSugar
Check.ThrowNotSupportedException(item.GetType().Name);
}
}
protected static bool IsNotMember(Expression item)
{
return item is UnaryExpression &&
item.Type == UtilConstants.BoolType &&
(item as UnaryExpression).NodeType == ExpressionType.Not &&
(item as UnaryExpression).Operand is MemberExpression &&
((item as UnaryExpression).Operand as MemberExpression).Expression != null &&
((item as UnaryExpression).Operand as MemberExpression).Expression.NodeType == ExpressionType.Parameter;
}
protected bool IsSubMethod(MethodCallExpression express)
{

View File

@ -48,7 +48,7 @@ namespace SqlSugar
throw new NotSupportedException();
}
MemberAssignment memberAssignment = (MemberAssignment)binding;
var type =expression.Type;
var type = expression.Type;
var memberName = this.Context.GetDbColumnName(type.Name, memberAssignment.Member.Name);
var item = memberAssignment.Expression;
if ((item is MemberExpression) && ((MemberExpression)item).Expression == null)
@ -57,12 +57,7 @@ namespace SqlSugar
string parameterName = AppendParameter(paramterValue);
this.Context.Result.Append(base.Context.GetEqString(memberName, parameterName));
}
else if (item is UnaryExpression&&
item.Type==UtilConstants.BoolType&&
(item as UnaryExpression).NodeType==ExpressionType.Not&&
(item as UnaryExpression).Operand is MemberExpression&&
((item as UnaryExpression).Operand as MemberExpression).Expression!=null&&
((item as UnaryExpression).Operand as MemberExpression).Expression.NodeType == ExpressionType.Parameter)
else if (IsNotMember(item))
{
if (base.Context.Result.IsLockCurrentParameter == false)
{

View File

@ -9,6 +9,7 @@ namespace SqlSugar
{
public UnaryExpressionResolve(ExpressionParameter parameter) : base(parameter)
{
var oldExpression = base.Expression;
var expression = base.Expression as UnaryExpression;
var baseParameter = parameter.BaseParameter;
switch (this.Context.ResolveType)
@ -36,6 +37,10 @@ namespace SqlSugar
{
Result(parameter, nodeType);
}
else if (baseParameter.OperatorValue == "=" &&IsNotMember(oldExpression))
{
AppendNotMember(parameter,nodeType);
}
else if (base.Expression is BinaryExpression || parameter.BaseExpression is BinaryExpression || baseParameter.CommonTempData.ObjToString() == CommonTempDataType.Append.ToString())
{
Append(parameter, nodeType);
@ -130,5 +135,26 @@ namespace SqlSugar
parameter.BaseParameter.ChildExpression = base.Expression;
parameter.CommonTempData = null;
}
private void AppendNotMember(ExpressionParameter parameter, ExpressionType nodeType)
{
BaseParameter.ChildExpression = base.Expression;
this.IsLeft = parameter.IsLeft;
parameter.CommonTempData = CommonTempDataType.Result;
base.Start();
var result= this.Context.DbMehtods.IIF(new MethodCallExpressionModel()
{
Args = new List<MethodCallExpressionArgs>() {
new MethodCallExpressionArgs(){ IsMember=true, MemberName=parameter.CommonTempData.ObjToString()+"=1" },
new MethodCallExpressionArgs(){ IsMember=true,MemberName=AppendParameter(0) },
new MethodCallExpressionArgs(){ IsMember=true, MemberName=AppendParameter(1) }
}
});
this.Context.Result.Append(result);
parameter.BaseParameter.ChildExpression = base.Expression;
parameter.CommonTempData = null;
}
}
}