This commit is contained in:
sunkaixuan 2017-11-28 13:06:57 +08:00
parent 18ec8941de
commit c7d6bbabb5
2 changed files with 68 additions and 25 deletions

View File

@ -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);

View File

@ -105,9 +105,12 @@ 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)); {
CusMethod(parameter, express, isLeft);
} }
else
{
var method = express.Method; var method = express.Method;
string name = method.Name; string name = method.Name;
var args = express.Arguments.Cast<Expression>().ToList(); var args = express.Arguments.Cast<Expression>().ToList();
@ -133,6 +136,30 @@ namespace SqlSugar
break; 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;