This commit is contained in:
sunkaixuan
2017-07-13 22:38:02 +08:00
parent b566a8e1c2
commit bc627236c4
3 changed files with 67 additions and 20 deletions

View File

@@ -21,6 +21,10 @@ namespace OrmTest.UnitTest
base.Begin(); base.Begin();
for (int i = 0; i < base.Count; i++) for (int i = 0; i < base.Count; i++)
{ {
whereSingle21();
whereSingle20();
whereSingle19();
whereSingle18(); whereSingle18();
whereSingle17(); whereSingle17();
whereSingle16(); whereSingle16();
@@ -308,6 +312,43 @@ namespace OrmTest.UnitTest
}, "whereSingle18"); }, "whereSingle18");
} }
private void whereSingle19()
{
Expression<Func<DataTestInfo2, bool>> exp = it => it.Bool2.Value==false;
SqlServerExpressionContext expContext = new SqlServerExpressionContext();
expContext.Resolve(exp, ResolveExpressType.WhereSingle);
var value = expContext.Result.GetString();
var pars = expContext.Parameters;
base.Check(value, pars, "( [Bool2] = @Value0 )", new List<SugarParameter>()
{
new SugarParameter("@Value0",false)
}, "whereSingle19");
}
private void whereSingle20()
{
Expression<Func<DataTestInfo2, bool>> exp = it => it.Bool2.Value == it.Bool1;
SqlServerExpressionContext expContext = new SqlServerExpressionContext();
expContext.Resolve(exp, ResolveExpressType.WhereSingle);
var value = expContext.Result.GetString();
var pars = expContext.Parameters;
base.Check(value, pars, "( [Bool2] = [Bool1] )", new List<SugarParameter>()
{
}, "whereSingle19");
}
private void whereSingle21()
{
//Expression<Func<DataTestInfo2, bool>> exp = it => it.Bool2.Value;
//SqlServerExpressionContext expContext = new SqlServerExpressionContext();
//expContext.Resolve(exp, ResolveExpressType.WhereSingle);
//var value = expContext.Result.GetString();
//var pars = expContext.Parameters;
//base.Check(value, pars, "( 1 = 2 )", new List<SugarParameter>()
//{
//}, "whereSingle21");
}
} }
public class WhereConst public class WhereConst

View File

@@ -14,8 +14,13 @@ namespace SqlSugar
var isLeft = parameter.IsLeft; var isLeft = parameter.IsLeft;
var isSetTempData = baseParameter.CommonTempData.IsValuable() && baseParameter.CommonTempData.Equals(CommonTempDataType.Result); var isSetTempData = baseParameter.CommonTempData.IsValuable() && baseParameter.CommonTempData.Equals(CommonTempDataType.Result);
var expression = base.Expression as MemberExpression; var expression = base.Expression as MemberExpression;
if (expression.Expression != null&& expression.Expression.NodeType!= ExpressionType.Parameter) { if (expression.Member.Name == "Value" && expression.Member.GetType().Name == "RuntimePropertyInfo")
var value= ExpressionTool.GetMemberValue(expression.Member, expression); {
expression = expression.Expression as MemberExpression;
}
else if (expression.Expression != null && expression.Expression.NodeType != ExpressionType.Parameter)
{
var value = ExpressionTool.GetMemberValue(expression.Member, expression);
if (isSetTempData) if (isSetTempData)
{ {
baseParameter.CommonTempData = value; baseParameter.CommonTempData = value;
@@ -31,7 +36,7 @@ namespace SqlSugar
switch (parameter.Context.ResolveType) switch (parameter.Context.ResolveType)
{ {
case ResolveExpressType.SelectSingle: case ResolveExpressType.SelectSingle:
fieldName = getSingleName(parameter, expression, isLeft); fieldName = GetSingleName(parameter, expression, isLeft);
if (isSetTempData) if (isSetTempData)
{ {
baseParameter.CommonTempData = fieldName; baseParameter.CommonTempData = fieldName;
@@ -42,7 +47,7 @@ namespace SqlSugar
} }
break; break;
case ResolveExpressType.SelectMultiple: case ResolveExpressType.SelectMultiple:
fieldName = getMultipleName(parameter, expression, isLeft); fieldName = GetMultipleName(parameter, expression, isLeft);
if (isSetTempData) if (isSetTempData)
{ {
baseParameter.CommonTempData = fieldName; baseParameter.CommonTempData = fieldName;
@@ -55,40 +60,41 @@ namespace SqlSugar
case ResolveExpressType.WhereSingle: case ResolveExpressType.WhereSingle:
if (isSetTempData) if (isSetTempData)
{ {
fieldName = getSingleName(parameter, expression, null); fieldName = GetSingleName(parameter, expression, null);
baseParameter.CommonTempData = fieldName; baseParameter.CommonTempData = fieldName;
} }
else else
{ {
fieldName = getSingleName(parameter, expression, isLeft); fieldName = GetSingleName(parameter, expression, isLeft);
if (expression.Type == PubConst.BoolType&&baseParameter.OperatorValue.IsNullOrEmpty()) { if (expression.Type == PubConst.BoolType && baseParameter.OperatorValue.IsNullOrEmpty())
fieldName= "( "+fieldName+"=1 )"; {
fieldName = "( " + fieldName + "=1 )";
} }
fieldName = AppendMember(parameter, isLeft, fieldName); fieldName = AppendMember(parameter, isLeft, fieldName);
} }
break; break;
case ResolveExpressType.WhereMultiple: case ResolveExpressType.WhereMultiple:
if (isSetTempData) if (isSetTempData)
{ {
fieldName = getMultipleName(parameter, expression, null); fieldName = GetMultipleName(parameter, expression, null);
baseParameter.CommonTempData = fieldName; baseParameter.CommonTempData = fieldName;
} }
else else
{ {
fieldName = getMultipleName(parameter, expression, isLeft); fieldName = GetMultipleName(parameter, expression, isLeft);
fieldName = AppendMember(parameter, isLeft, fieldName); fieldName = AppendMember(parameter, isLeft, fieldName);
} }
break; break;
case ResolveExpressType.FieldSingle: case ResolveExpressType.FieldSingle:
fieldName = getSingleName(parameter, expression, isLeft); fieldName = GetSingleName(parameter, expression, isLeft);
base.Context.Result.Append(fieldName); base.Context.Result.Append(fieldName);
break; break;
case ResolveExpressType.FieldMultiple: case ResolveExpressType.FieldMultiple:
fieldName = getMultipleName(parameter, expression, isLeft); fieldName = GetMultipleName(parameter, expression, isLeft);
base.Context.Result.Append(fieldName); base.Context.Result.Append(fieldName);
break; break;
case ResolveExpressType.ArraySingle: case ResolveExpressType.ArraySingle:
fieldName = getArrayName(parameter, expression, isLeft); fieldName = GetArrayName(parameter, expression, isLeft);
base.Context.Result.Append(fieldName); base.Context.Result.Append(fieldName);
break; break;
default: default:
@@ -98,7 +104,7 @@ namespace SqlSugar
private string AppendMember(ExpressionParameter parameter, bool? isLeft, string fieldName) private string AppendMember(ExpressionParameter parameter, bool? isLeft, string fieldName)
{ {
if (parameter.BaseExpression is BinaryExpression|| (parameter.BaseParameter.CommonTempData!=null&&parameter.BaseParameter.CommonTempData.Equals(CommonTempDataType.Append))) if (parameter.BaseExpression is BinaryExpression || (parameter.BaseParameter.CommonTempData != null && parameter.BaseParameter.CommonTempData.Equals(CommonTempDataType.Append)))
{ {
fieldName = string.Format(" {0} ", fieldName); fieldName = string.Format(" {0} ", fieldName);
if (isLeft == true) if (isLeft == true)
@@ -122,23 +128,23 @@ namespace SqlSugar
return fieldName; return fieldName;
} }
private string getMultipleName(ExpressionParameter parameter, MemberExpression expression, bool? isLeft) private string GetMultipleName(ExpressionParameter parameter, MemberExpression expression, bool? isLeft)
{ {
string shortName = expression.Expression.ToString(); string shortName = expression.Expression.ToString();
string fieldName = expression.Member.Name; string fieldName = expression.Member.Name;
fieldName=this.Context.GetDbColumnName(expression.Expression.Type.Name, fieldName); fieldName = this.Context.GetDbColumnName(expression.Expression.Type.Name, fieldName);
fieldName =Context.GetTranslationColumnName(shortName + "." + fieldName); fieldName = Context.GetTranslationColumnName(shortName + "." + fieldName);
return fieldName; return fieldName;
} }
private string getSingleName(ExpressionParameter parameter, MemberExpression expression, bool? isLeft) private string GetSingleName(ExpressionParameter parameter, MemberExpression expression, bool? isLeft)
{ {
string fieldName = expression.Member.Name; string fieldName = expression.Member.Name;
fieldName = this.Context.GetDbColumnName(expression.Expression.Type.Name, fieldName); fieldName = this.Context.GetDbColumnName(expression.Expression.Type.Name, fieldName);
fieldName = Context.GetTranslationColumnName(fieldName); fieldName = Context.GetTranslationColumnName(fieldName);
return fieldName; return fieldName;
} }
private string getArrayName(ExpressionParameter parameter, MemberExpression expression, bool? isLeft) private string GetArrayName(ExpressionParameter parameter, MemberExpression expression, bool? isLeft)
{ {
string fieldName = expression.Member.Name; string fieldName = expression.Member.Name;
return fieldName; return fieldName;