Update exp to sql

This commit is contained in:
sunkaixuan
2019-02-06 21:15:48 +08:00
parent 30ebde1dff
commit 0aac410c8f
2 changed files with 58 additions and 2 deletions

View File

@@ -399,6 +399,13 @@ namespace OrmTest.Demo
var test12 = db.Queryable<Student>().Distinct().Select(it=>new Student{ Name=it.Name }).ToList();
var test13 = db.Queryable<Student>().Where(it=>DateTime.Parse("2014-1-1")==DateTime.Now).Where(it => Boolean.Parse("true") ==true).ToList();
var test14 = db.Queryable<DataTestInfo2>().Where(it =>Convert.ToBoolean(it.Bool1)).ToList();
var test15 = db.Queryable<DataTestInfo2>().Where(it => it.Bool2.Value&&it.Bool1).ToList();
var test16 = db.Queryable<DataTestInfo2>().Where(it => !it.Bool2.Value && !it.Bool1).ToList();
var test17 = db.Queryable<DataTestInfo2>().Where(it => it.Bool1 && it.Bool1).ToList();
var test18 = db.Queryable<Student>().Where(it => it.SchoolId.HasValue&&it.SchoolId.HasValue).ToList();
var test19 = db.Queryable<Student>().Where(it => it.SchoolId.HasValue && it.SchoolId.HasValue&&it.SchoolId.HasValue).ToList();
var test20 = db.Queryable<Student>().Where(it => it.SchoolId.HasValue && SqlFunc.IsNullOrEmpty(it.Name)).ToList();
//var test24 = db.Queryable<Student>().Where(it => !it.SchoolId.HasValue && it.SchoolId.HasValue).ToList();
}
public static void Page()
{

View File

@@ -100,6 +100,37 @@ namespace SqlSugar
#endregion
#region Resolve Where
private void ResolveBoolLogic(ExpressionParameter parameter, ExpressionParameter baseParameter, MemberExpression expression, bool? isLeft, bool isSetTempData, bool isSingle)
{
string fieldName = string.Empty;
if (isSetTempData)
{
if (ExpressionTool.IsConstExpression(expression))
{
var value = ExpressionTool.GetMemberValue(expression.Member, expression);
baseParameter.CommonTempData = value+"=1 ";
}
else
{
fieldName = GetName(parameter, expression, null, isSingle);
baseParameter.CommonTempData = fieldName+"=1 ";
}
}
else
{
if (ExpressionTool.IsConstExpression(expression))
{
var value = ExpressionTool.GetMemberValue(expression.Member, expression);
base.AppendValue(parameter, isLeft, value+"=1 ");
}
else
{
fieldName = GetName(parameter, expression, isLeft, isSingle);
AppendMember(parameter, isLeft, fieldName+"=1 ");
}
}
}
private void ResolveWhereLogic(ExpressionParameter parameter, ExpressionParameter baseParameter, MemberExpression expression, bool? isLeft, bool isSetTempData, bool isSingle)
{
string fieldName = string.Empty;
@@ -137,7 +168,14 @@ namespace SqlSugar
{
expression = expression.Expression as MemberExpression;
baseParameter.ChildExpression = expression;
if (UtilMethods.GetUnderType(expression.Type) == UtilConstants.BoolType&&parameter.BaseExpression!=null&&ExpressionTool.IsLogicOperator(parameter.BaseExpression))
{
ResolveBoolLogic(parameter, baseParameter, expression, isLeft, isSetTempData, isSingle);
}
else
{
ResolveWhereLogic(parameter, baseParameter, expression, isLeft, isSetTempData, isSingle);
}
return expression;
}
@@ -248,7 +286,18 @@ namespace SqlSugar
methodParamter
}
});
if (parameter.BaseExpression != null && ExpressionTool.IsLogicOperator(parameter.BaseExpression) && parameter.IsLeft == true)
{
if (base.Context.Result.Contains(ExpressionConst.FormatSymbol))
{
base.Context.Result.Replace(ExpressionConst.FormatSymbol, "");
}
this.Context.Result.Append(result+" "+ExpressionTool.GetOperator(parameter.BaseExpression.NodeType)+" ");
}
else
{
this.Context.Result.Append(result);
}
parameter.CommonTempData = null;
}