Support native HasValue

This commit is contained in:
sunkaixuan 2017-07-11 13:18:24 +08:00
parent ef67119868
commit d3de52b89f
4 changed files with 50 additions and 27 deletions

View File

@ -18,7 +18,7 @@ namespace OrmTest
static void Main(string[] args) static void Main(string[] args)
{ {
// /***Unit Test***/ // /***Unit Test***/
//new Select(1).Init(); new Select(1).Init();
new Field(1).Init(); new Field(1).Init();
new Where(1).Init(); new Where(1).Init();
new Method(1).Init(); new Method(1).Init();

View File

@ -129,8 +129,9 @@ namespace OrmTest.UnitTest
"Select.single4 Error"); "Select.single4 Error");
} }
private void single5(DateTime? p = null) private void single5()
{ {
var p =(DateTime?) DateTime.Now;
Expression<Func<Student, object>> exp = it => p.HasValue; Expression<Func<Student, object>> exp = it => p.HasValue;
SqlServerExpressionContext expContext = new SqlServerExpressionContext(); SqlServerExpressionContext expContext = new SqlServerExpressionContext();
expContext.IsSingle = false; expContext.IsSingle = false;
@ -138,7 +139,9 @@ namespace OrmTest.UnitTest
var selectorValue = expContext.Result.GetString(); var selectorValue = expContext.Result.GetString();
var pars = expContext.Parameters; var pars = expContext.Parameters;
base.Check( base.Check(
@"( [it].[SchoolId]<>'' AND [it].[SchoolId] IS NOT NULL )", null, selectorValue, null, @"( @constant0<>'' AND @constant0 IS NOT NULL )", new List<SugarParameter>() {
new SugarParameter("@constant0",p)
}, selectorValue, pars,
"Select.single4 Error"); "Select.single4 Error");
} }

View File

@ -106,6 +106,7 @@ namespace SqlSugar
} }
return null; return null;
} }
protected void AppendMember(ExpressionParameter parameter, bool? isLeft, object appendValue) protected void AppendMember(ExpressionParameter parameter, bool? isLeft, object appendValue)
{ {
@ -197,6 +198,25 @@ namespace SqlSugar
this.Context.Result.Append(" " + ExpressionConst.Format1 + parameter.BaseParameter.Index); this.Context.Result.Append(" " + ExpressionConst.Format1 + parameter.BaseParameter.Index);
} }
} }
protected string AppendParameter(object paramterValue)
{
string parameterName = this.Context.SqlParameterKeyWord + "constant" + this.Context.ParameterIndex;
this.Context.ParameterIndex++;;
this.Context.Parameters.Add(new SugarParameter(parameterName, paramterValue));
return parameterName;
}
protected void AppendNot(object Value)
{
var isAppend = !this.Context.Result.Contains(ExpressionConst.Format0);
if (isAppend)
{
this.Context.Result.Append("NOT");
}
else
{
this.Context.Result.Replace(ExpressionConst.Format0, "NOT");
}
}
protected MethodCallExpressionArgs GetMethodCallArgs(ExpressionParameter parameter, Expression item) protected MethodCallExpressionArgs GetMethodCallArgs(ExpressionParameter parameter, Expression item)
{ {
@ -215,7 +235,6 @@ namespace SqlSugar
}; };
return methodCallExpressionArgs; return methodCallExpressionArgs;
} }
protected void ResolveNewExpressions(ExpressionParameter parameter, Expression item, string asName) protected void ResolveNewExpressions(ExpressionParameter parameter, Expression item, string asName)
{ {
if (item.NodeType == ExpressionType.Constant) if (item.NodeType == ExpressionType.Constant)
@ -366,18 +385,5 @@ namespace SqlSugar
Check.ThrowNotSupportedException(item.GetType().Name); Check.ThrowNotSupportedException(item.GetType().Name);
} }
} }
protected void AppendNot(object Value)
{
var isAppend = !this.Context.Result.Contains(ExpressionConst.Format0);
if (isAppend)
{
this.Context.Result.Append("NOT");
}
else
{
this.Context.Result.Replace(ExpressionConst.Format0, "NOT");
}
}
} }
} }

View File

@ -60,6 +60,19 @@ namespace SqlSugar
var member = memberExpression.Expression as MemberExpression; var member = memberExpression.Expression as MemberExpression;
parameter.CommonTempData = CommonTempDataType.Result; parameter.CommonTempData = CommonTempDataType.Result;
var isConst = member.Expression != null && member.Expression is ConstantExpression; var isConst = member.Expression != null && member.Expression is ConstantExpression;
if (isConst)
{
var paramterValue = ExpressionTool.DynamicInvoke(member);
var paramterName= base.AppendParameter(paramterValue);
var result = this.Context.DbMehtods.HasValue(new MethodCallExpressionModel()
{
Args = new List<MethodCallExpressionArgs>() {
new MethodCallExpressionArgs() { IsMember=false, MemberName=paramterName, MemberValue=paramterValue } }
});
this.Context.Result.Append(result);
}
else
{
this.Expression = isConst ? member.Expression : member; this.Expression = isConst ? member.Expression : member;
this.Start(); this.Start();
var methodParamter = isConst ? new MethodCallExpressionArgs() { IsMember = false } : new MethodCallExpressionArgs() { IsMember = true, MemberName = parameter.CommonTempData, MemberValue = null }; var methodParamter = isConst ? new MethodCallExpressionArgs() { IsMember = false } : new MethodCallExpressionArgs() { IsMember = true, MemberName = parameter.CommonTempData, MemberValue = null };
@ -72,6 +85,7 @@ namespace SqlSugar
this.Context.Result.Append(result); this.Context.Result.Append(result);
parameter.CommonTempData = null; parameter.CommonTempData = null;
} }
}
else if (memberExpression.Type == PubConst.BoolType && isLogicOperator) else if (memberExpression.Type == PubConst.BoolType && isLogicOperator)
{ {
Append(parameter, nodeType); Append(parameter, nodeType);