This commit is contained in:
sunkaixuan
2017-01-30 16:42:33 +08:00
parent 455fcbe7b0
commit 0e9431ce4b
8 changed files with 51 additions and 23 deletions

View File

@@ -23,6 +23,7 @@ namespace OrmTest.ExpressionTest
{
StringIsNullOrEmpty();
StringIsNullOrEmpty2();
StringIsNullOrEmpty3();
}
base.End("Method Test");
}
@@ -45,10 +46,24 @@ namespace OrmTest.ExpressionTest
expContext.Resolve();
var value = expContext.Result.GetString();
var pars = expContext.Parameters;
base.Check(value, pars, "(( Id > @Id0 ) OR ( Id='' OR Id IS NULL ))", new List<SugarParameter>() {
base.Check(value, pars, "(( @Id0 = Id ) OR ( @MethodCost1='' OR @MethodCost1 IS NULL ))", new List<SugarParameter>() {
new SugarParameter("@MethodCost1",true),
new SugarParameter("@Id0",2)
}, "StringIsNullOrEmpty2");
}
private void StringIsNullOrEmpty3()
{
int a = 1;
Expression<Func<Student, bool>> exp = it => 2 == it.Id || NBORM.IsNullOrEmpty(a); ;
SqlServerExpressionContext expContext = new SqlServerExpressionContext(exp, ResolveExpressType.WhereSingle);
expContext.Resolve();
var value = expContext.Result.GetString();
var pars = expContext.Parameters;
base.Check(value, pars, "(( @Id0 = Id ) OR ( @MethodCost1='' OR @MethodCost1 IS NULL ))", new List<SugarParameter>() {
new SugarParameter("@MethodCost1",1),
new SugarParameter("@Id0",2)
}, "StringIsNullOrEmpty3");
}
}
}

View File

@@ -17,7 +17,7 @@ namespace OrmTest
static void Main(string[] args)
{
//Expression To Sql Unit Test
int eachCount = 1000;
int eachCount = 1;
new OrmTest.ExpressionTest.Select(eachCount).Init();
new OrmTest.ExpressionTest.Field(eachCount).Init();
new OrmTest.ExpressionTest.Where(eachCount).Init();

View File

@@ -7,7 +7,6 @@ namespace SqlSugar
{
internal class ExpressionConst
{
public const string BinaryExpressionInfoListKey = "BinaryExpressionInfoListKey";
public const string BinaryFormatString = " ( {0} {1} {2} ) ";
public const string Format0 = "{0}";
public const string Format1 = "$__$";
@@ -15,6 +14,7 @@ namespace SqlSugar
public const string Format3 = "(";
public const string Format4 = ")";
public const string NBORMFULLNAME = "SqlSugar.NBORM";
public const string METHODCOST = "MethodCost";
public readonly static Type MemberExpressionType = typeof(MemberExpression);
public readonly static Type ConstantExpressionType = typeof(ConstantExpression);
public readonly static Type StringType = typeof(string);

View File

@@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SqlSugar
{
public enum ExpressionResultAppendType

View File

@@ -2,7 +2,6 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SqlSugar
{
public enum ResolveExpressType

View File

@@ -5,20 +5,12 @@ using System.Text;
using System.Threading.Tasks;
namespace SqlSugar
{
public partial class DefaultDbMethod : IDbMethods
public abstract partial class DefaultDbMethod : IDbMethods
{
public virtual string IsNullOrEmpty(MethodCallExpressionModel model)
{
var parameter = model.Args[0];
if (parameter.IsMember)
{
return string.Format("( {0}='' OR {0} IS NULL )", parameter.Value);
}
else
{
return null;
}
return string.Format("( {0}='' OR {0} IS NULL )", parameter.Value);
}
}
}

View File

@@ -14,6 +14,8 @@ namespace SqlSugar
var expression = base.Expression as MemberExpression;
var isLeft = parameter.IsLeft;
object value = ExpressionTool.GetMemberValue(expression.Member, expression);
var baseParameter = parameter.BaseParameter;
var isSetTempData = baseParameter.CommonTempData.IsValuable() && baseParameter.CommonTempData.Equals(CommonTempDataType.ChildNodeSet);
switch (parameter.Context.ResolveType)
{
case ResolveExpressType.SelectSingle:
@@ -21,10 +23,15 @@ namespace SqlSugar
parameter.BaseParameter.CommonTempData = value;
break;
case ResolveExpressType.WhereSingle:
AppendParameter(parameter, isLeft, value);
break;
case ResolveExpressType.WhereMultiple:
AppendParameter(parameter, isLeft, value);
if (isSetTempData)
{
baseParameter.CommonTempData = value;
}
else
{
AppendParameter(parameter, isLeft, value);
}
break;
case ResolveExpressType.FieldSingle:
case ResolveExpressType.FieldMultiple:

View File

@@ -25,13 +25,30 @@ namespace SqlSugar
{
base.Expression = item;
base.Start();
model.Args.Add(new MethodCallExpressionArgs()
var methodCallExpressionArgs = new MethodCallExpressionArgs()
{
IsMember = parameter.ChildExpression is MemberExpression,
Value = parameter.CommonTempData
});
};
var value = methodCallExpressionArgs.Value;
if (methodCallExpressionArgs.IsMember)
{
var childExpression = parameter.ChildExpression as MemberExpression;
if (childExpression.Expression != null && childExpression.Expression is ConstantExpression)
{
methodCallExpressionArgs.IsMember = false;
}
}
if (methodCallExpressionArgs.IsMember == false)
{
var parameterName = this.Context.SqlParameterKeyWord + ExpressionConst.METHODCOST + this.Context.ParameterIndex;
this.Context.ParameterIndex++;
methodCallExpressionArgs.Value = parameterName;
this.Context.Parameters.Add(new SugarParameter(parameterName, value));
}
model.Args.Add(methodCallExpressionArgs);
}
var methodValue = GetMdthodValue(name,model);
var methodValue = GetMdthodValue(name, model);
base.Context.Result.Append(methodValue);
break;
case ResolveExpressType.SelectSingle:
@@ -39,7 +56,6 @@ namespace SqlSugar
case ResolveExpressType.FieldSingle:
case ResolveExpressType.FieldMultiple:
default:
break;
}
}
@@ -49,7 +65,7 @@ namespace SqlSugar
switch (name)
{
case "IsNullOrEmpty":
return this.Context.DbMehtods.IsNullOrEmpty(model);
return this.Context.DbMehtods.IsNullOrEmpty(model);
default:
break;
}