mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-10-15 18:55:07 +08:00
ok
This commit is contained in:
@@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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();
|
||||
|
@@ -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);
|
||||
|
@@ -3,7 +3,6 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SqlSugar
|
||||
{
|
||||
public enum ExpressionResultAppendType
|
||||
|
@@ -2,7 +2,6 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace SqlSugar
|
||||
{
|
||||
public enum ResolveExpressType
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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:
|
||||
|
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user