mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-07-15 23:13:42 +08:00
-
This commit is contained in:
parent
18ec8941de
commit
c7d6bbabb5
@ -21,6 +21,7 @@ namespace OrmTest.UnitTest
|
|||||||
base.Begin();
|
base.Begin();
|
||||||
for (int i = 0; i < base.Count; i++)
|
for (int i = 0; i < base.Count; i++)
|
||||||
{
|
{
|
||||||
|
whereSingle28();
|
||||||
whereSingle27();
|
whereSingle27();
|
||||||
whereSingle26();
|
whereSingle26();
|
||||||
whereSingle25();
|
whereSingle25();
|
||||||
@ -55,6 +56,21 @@ namespace OrmTest.UnitTest
|
|||||||
}
|
}
|
||||||
base.End("Where Test");
|
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() {
|
private void whereSingle27() {
|
||||||
var schoolData = new School() { Id = 100, Name = "x" };
|
var schoolData = new School() { Id = 100, Name = "x" };
|
||||||
Expression<Func<Student, bool>> exp = it => it.Name.Contains(schoolData.Name);
|
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)
|
private void SqlFuncMethod(ExpressionParameter parameter, MethodCallExpression express, bool? isLeft)
|
||||||
{
|
{
|
||||||
if (!CheckMethod(express)) {
|
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)
|
|
||||||
{
|
{
|
||||||
case ResolveExpressType.WhereSingle:
|
CusMethod(parameter, express, isLeft);
|
||||||
case ResolveExpressType.WhereMultiple:
|
}
|
||||||
Check.Exception(name == "GetSelfAndAutoFill", "SqlFunc.GetSelfAndAutoFill can only be used in Select.");
|
else
|
||||||
Where(parameter, isLeft, name, args, model);
|
{
|
||||||
break;
|
var method = express.Method;
|
||||||
case ResolveExpressType.SelectSingle:
|
string name = method.Name;
|
||||||
case ResolveExpressType.SelectMultiple:
|
var args = express.Arguments.Cast<Expression>().ToList();
|
||||||
case ResolveExpressType.Update:
|
MethodCallExpressionModel model = new MethodCallExpressionModel();
|
||||||
Select(parameter, isLeft, name, args, model);
|
model.Args = new List<MethodCallExpressionArgs>();
|
||||||
break;
|
switch (this.Context.ResolveType)
|
||||||
case ResolveExpressType.FieldSingle:
|
{
|
||||||
case ResolveExpressType.FieldMultiple:
|
case ResolveExpressType.WhereSingle:
|
||||||
Field(parameter, isLeft, name, args, model);
|
case ResolveExpressType.WhereMultiple:
|
||||||
break;
|
Check.Exception(name == "GetSelfAndAutoFill", "SqlFunc.GetSelfAndAutoFill can only be used in Select.");
|
||||||
default:
|
Where(parameter, isLeft, name, args, model);
|
||||||
break;
|
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)
|
private void NativeExtensionMethod(ExpressionParameter parameter, MethodCallExpression express, bool? isLeft, string name, List<MethodCallExpressionArgs> appendArgs = null)
|
||||||
{
|
{
|
||||||
var method = express.Method;
|
var method = express.Method;
|
||||||
|
Loading…
Reference in New Issue
Block a user