mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-04-24 18:04:52 +08:00
-
This commit is contained in:
parent
18ec8941de
commit
c7d6bbabb5
@ -21,6 +21,7 @@ namespace OrmTest.UnitTest
|
||||
base.Begin();
|
||||
for (int i = 0; i < base.Count; i++)
|
||||
{
|
||||
whereSingle28();
|
||||
whereSingle27();
|
||||
whereSingle26();
|
||||
whereSingle25();
|
||||
@ -55,6 +56,21 @@ namespace OrmTest.UnitTest
|
||||
}
|
||||
base.End("Where Test");
|
||||
}
|
||||
public string Get28(string a) {
|
||||
return a + "1";
|
||||
}
|
||||
private void whereSingle28()
|
||||
{
|
||||
Expression<Func<Student, bool>> exp = it => Get28("22")=="22";
|
||||
ExpressionContext expContext = new ExpressionContext();
|
||||
expContext.Resolve(exp, ResolveExpressType.WhereMultiple);
|
||||
var value = expContext.Result.GetString();
|
||||
var pars = expContext.Parameters;
|
||||
base.Check(value, pars, " (@constant0 = @Const1 )", new List<SugarParameter>() {
|
||||
new SugarParameter("@constant0","221"),
|
||||
new SugarParameter("@Const1","22")
|
||||
}, "whereSingle28");
|
||||
}
|
||||
private void whereSingle27() {
|
||||
var schoolData = new School() { Id = 100, Name = "x" };
|
||||
Expression<Func<Student, bool>> exp = it => it.Name.Contains(schoolData.Name);
|
||||
|
@ -105,34 +105,61 @@ namespace SqlSugar
|
||||
|
||||
private void SqlFuncMethod(ExpressionParameter parameter, MethodCallExpression express, bool? isLeft)
|
||||
{
|
||||
if (!CheckMethod(express)) {
|
||||
Check.Exception(true, string.Format(ErrorMessage.MethodError, express.Method.Name));
|
||||
}
|
||||
var method = express.Method;
|
||||
string name = method.Name;
|
||||
var args = express.Arguments.Cast<Expression>().ToList();
|
||||
MethodCallExpressionModel model = new MethodCallExpressionModel();
|
||||
model.Args = new List<MethodCallExpressionArgs>();
|
||||
switch (this.Context.ResolveType)
|
||||
if (!CheckMethod(express))
|
||||
{
|
||||
case ResolveExpressType.WhereSingle:
|
||||
case ResolveExpressType.WhereMultiple:
|
||||
Check.Exception(name == "GetSelfAndAutoFill", "SqlFunc.GetSelfAndAutoFill can only be used in Select.");
|
||||
Where(parameter, isLeft, name, args, model);
|
||||
break;
|
||||
case ResolveExpressType.SelectSingle:
|
||||
case ResolveExpressType.SelectMultiple:
|
||||
case ResolveExpressType.Update:
|
||||
Select(parameter, isLeft, name, args, model);
|
||||
break;
|
||||
case ResolveExpressType.FieldSingle:
|
||||
case ResolveExpressType.FieldMultiple:
|
||||
Field(parameter, isLeft, name, args, model);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
CusMethod(parameter, express, isLeft);
|
||||
}
|
||||
else
|
||||
{
|
||||
var method = express.Method;
|
||||
string name = method.Name;
|
||||
var args = express.Arguments.Cast<Expression>().ToList();
|
||||
MethodCallExpressionModel model = new MethodCallExpressionModel();
|
||||
model.Args = new List<MethodCallExpressionArgs>();
|
||||
switch (this.Context.ResolveType)
|
||||
{
|
||||
case ResolveExpressType.WhereSingle:
|
||||
case ResolveExpressType.WhereMultiple:
|
||||
Check.Exception(name == "GetSelfAndAutoFill", "SqlFunc.GetSelfAndAutoFill can only be used in Select.");
|
||||
Where(parameter, isLeft, name, args, model);
|
||||
break;
|
||||
case ResolveExpressType.SelectSingle:
|
||||
case ResolveExpressType.SelectMultiple:
|
||||
case ResolveExpressType.Update:
|
||||
Select(parameter, isLeft, name, args, model);
|
||||
break;
|
||||
case ResolveExpressType.FieldSingle:
|
||||
case ResolveExpressType.FieldMultiple:
|
||||
Field(parameter, isLeft, name, args, model);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void CusMethod(ExpressionParameter parameter, MethodCallExpression express, bool? isLeft)
|
||||
{
|
||||
try
|
||||
{
|
||||
var constValue = ExpressionTool.DynamicInvoke(express);
|
||||
parameter.BaseParameter.CommonTempData = constValue;
|
||||
var parameterName = base.AppendParameter(constValue);
|
||||
if (parameter.BaseParameter.CommonTempData != null && parameter.BaseParameter.CommonTempData.Equals(CommonTempDataType.Result))
|
||||
{
|
||||
this.Context.Result.Append(parameterName);
|
||||
}
|
||||
else
|
||||
{
|
||||
base.AppendValue(parameter, isLeft, parameterName);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
Check.Exception(true, string.Format(ErrorMessage.MethodError, express.Method.Name));
|
||||
}
|
||||
}
|
||||
|
||||
private void NativeExtensionMethod(ExpressionParameter parameter, MethodCallExpression express, bool? isLeft, string name, List<MethodCallExpressionArgs> appendArgs = null)
|
||||
{
|
||||
var method = express.Method;
|
||||
|
Loading…
Reference in New Issue
Block a user