mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2026-02-26 13:43:10 +08:00
Support native methods
This commit is contained in:
@@ -20,7 +20,7 @@ namespace OrmTest
|
||||
/***Unit Test***/
|
||||
//new Field(1).Init();
|
||||
//new Where(1).Init();
|
||||
//new Method(1).Init();
|
||||
new Method(1).Init();
|
||||
//new JoinQuery(1).Init();
|
||||
//new SingleQuery(1).Init();
|
||||
//new SelectQuery(1).Init();
|
||||
@@ -34,15 +34,15 @@ namespace OrmTest
|
||||
new SqlSugarPerformance(100).Select();
|
||||
|
||||
/***Demo***/
|
||||
OrmTest.Demo.Query.Init();
|
||||
OrmTest.Demo.Insert.Init();
|
||||
OrmTest.Demo.Delete.Init();
|
||||
OrmTest.Demo.Update.Init();
|
||||
OrmTest.Demo.DbFirst.Init();
|
||||
OrmTest.Demo.JoinSql.Init();
|
||||
OrmTest.Demo.Filter.Init();
|
||||
OrmTest.Demo.MaterSlave.Init();
|
||||
OrmTest.Demo.ComplexModel.Init();
|
||||
//OrmTest.Demo.Query.Init();
|
||||
//OrmTest.Demo.Insert.Init();
|
||||
//OrmTest.Demo.Delete.Init();
|
||||
//OrmTest.Demo.Update.Init();
|
||||
//OrmTest.Demo.DbFirst.Init();
|
||||
//OrmTest.Demo.JoinSql.Init();
|
||||
//OrmTest.Demo.Filter.Init();
|
||||
//OrmTest.Demo.MaterSlave.Init();
|
||||
//OrmTest.Demo.ComplexModel.Init();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,13 @@ namespace OrmTest.UnitTest
|
||||
base.Begin();
|
||||
for (int i = 0; i < base.Count; i++)
|
||||
{
|
||||
|
||||
//Native methods
|
||||
ConvetToString();
|
||||
ExtendToString();
|
||||
ExtendSubstring();
|
||||
|
||||
//SqlFun methods
|
||||
IIF();
|
||||
IIF2();
|
||||
#region StringIsNullOrEmpty
|
||||
@@ -62,6 +69,31 @@ namespace OrmTest.UnitTest
|
||||
base.End("Method Test");
|
||||
}
|
||||
|
||||
private void ExtendToString()
|
||||
{
|
||||
Expression<Func<Student, bool>> exp = it => it.Id.ToString() == "a";
|
||||
SqlServerExpressionContext expContext = new SqlServerExpressionContext();
|
||||
expContext.Resolve(exp, ResolveExpressType.WhereSingle);
|
||||
var value = expContext.Result.GetString();
|
||||
var pars = expContext.Parameters;
|
||||
base.Check(value, pars, "(CAST([Id] AS NVARCHAR(MAX)) = @Const0 )", new List<SugarParameter>() {
|
||||
new SugarParameter("@Const0","a")
|
||||
}, "To_string error");
|
||||
}
|
||||
|
||||
private void ConvetToString()
|
||||
{
|
||||
Expression<Func<Student, bool>> exp = it => Convert.ToString(it.Id) == "a";
|
||||
SqlServerExpressionContext expContext = new SqlServerExpressionContext();
|
||||
expContext.Resolve(exp, ResolveExpressType.WhereSingle);
|
||||
var value = expContext.Result.GetString();
|
||||
var pars = expContext.Parameters;
|
||||
base.Check(value, pars, "(CAST([Id] AS NVARCHAR(MAX)) = @Const0 )", new List<SugarParameter>() {
|
||||
new SugarParameter("@Const0","a")
|
||||
}, "To_string error");
|
||||
}
|
||||
|
||||
|
||||
private void Length()
|
||||
{
|
||||
Expression<Func<Student, bool>> exp = it => SqlFunc.Length("aaaa") > 1;
|
||||
@@ -99,6 +131,19 @@ namespace OrmTest.UnitTest
|
||||
new SugarParameter("@MethodConst0","aaaa"), new SugarParameter("@MethodConst1",0) , new SugarParameter("@MethodConst2",2),new SugarParameter("@Const3","a")
|
||||
}, "Substring error");
|
||||
}
|
||||
private void ExtendSubstring()
|
||||
{
|
||||
var x2 = Guid.NewGuid();
|
||||
Expression<Func<Student, bool>> exp = it =>"aaaa".Substring(0, 2)== "a";
|
||||
SqlServerExpressionContext expContext = new SqlServerExpressionContext();
|
||||
expContext.Resolve(exp, ResolveExpressType.WhereSingle);
|
||||
var value = expContext.Result.GetString();
|
||||
var pars = expContext.Parameters;
|
||||
base.Check(value, pars, "(SUBSTRING(@MethodConst0,1 + @MethodConst1,@MethodConst2) = @Const3 )", new List<SugarParameter>() {
|
||||
new SugarParameter("@MethodConst0","aaaa"), new SugarParameter("@MethodConst1",0) , new SugarParameter("@MethodConst2",2),new SugarParameter("@Const3","a")
|
||||
}, "Substring error");
|
||||
}
|
||||
|
||||
|
||||
private void ToBool()
|
||||
{
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Text;
|
||||
@@ -12,10 +13,29 @@ namespace SqlSugar
|
||||
{
|
||||
var express = base.Expression as MethodCallExpression;
|
||||
var isLeft = parameter.IsLeft;
|
||||
var isValidNativeMethod =
|
||||
express.Method.Name.IsIn(
|
||||
"ToString", "ToInt32", "ToInt64",
|
||||
"Length", "Replace", "Substring",
|
||||
"Contains", "EndsWith", "StartsWith",
|
||||
"HasValue", "Trim", "Equals",
|
||||
"ToLower", "ToUpper");
|
||||
if (isValidNativeMethod)
|
||||
{
|
||||
NativeExtensionMethod(parameter, express, isLeft);
|
||||
}
|
||||
else
|
||||
{
|
||||
SqlFuncMethod(parameter, express, isLeft);
|
||||
}
|
||||
}
|
||||
|
||||
private void SqlFuncMethod(ExpressionParameter parameter, MethodCallExpression express, bool? isLeft)
|
||||
{
|
||||
CheckMethod(express);
|
||||
var method = express.Method;
|
||||
string name = method.Name;
|
||||
var args = express.Arguments;
|
||||
var args = express.Arguments.Cast<Expression>().ToList();
|
||||
MethodCallExpressionModel model = new MethodCallExpressionModel();
|
||||
model.Args = new List<MethodCallExpressionArgs>();
|
||||
switch (this.Context.ResolveType)
|
||||
@@ -35,7 +55,37 @@ namespace SqlSugar
|
||||
break;
|
||||
}
|
||||
}
|
||||
private void Select(ExpressionParameter parameter, bool? isLeft, string name, System.Collections.ObjectModel.ReadOnlyCollection<Expression> args, MethodCallExpressionModel model)
|
||||
|
||||
private void NativeExtensionMethod(ExpressionParameter parameter, MethodCallExpression express, bool? isLeft)
|
||||
{
|
||||
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:
|
||||
if (express.Object != null)
|
||||
args.Insert(0,express.Object);
|
||||
Where(parameter, isLeft, name, args, model);
|
||||
break;
|
||||
case ResolveExpressType.SelectSingle:
|
||||
case ResolveExpressType.SelectMultiple:
|
||||
case ResolveExpressType.Update:
|
||||
if (express.Object != null)
|
||||
args.Insert(0, express.Object);
|
||||
Select(parameter, isLeft, name, args, model);
|
||||
break;
|
||||
case ResolveExpressType.FieldSingle:
|
||||
case ResolveExpressType.FieldMultiple:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void Select(ExpressionParameter parameter, bool? isLeft, string name, IEnumerable<Expression> args, MethodCallExpressionModel model)
|
||||
{
|
||||
foreach (var item in args)
|
||||
{
|
||||
@@ -51,11 +101,11 @@ namespace SqlSugar
|
||||
}
|
||||
parameter.BaseParameter.CommonTempData = GetMdthodValue(name, model);
|
||||
}
|
||||
private void Where(ExpressionParameter parameter, bool? isLeft, string name, System.Collections.ObjectModel.ReadOnlyCollection<Expression> args, MethodCallExpressionModel model)
|
||||
private void Where(ExpressionParameter parameter, bool? isLeft, string name, IEnumerable<Expression> args, MethodCallExpressionModel model)
|
||||
{
|
||||
foreach (var item in args)
|
||||
{
|
||||
var isBinaryExpression = item is BinaryExpression||item is MethodCallExpression;
|
||||
var isBinaryExpression = item is BinaryExpression || item is MethodCallExpression;
|
||||
if (isBinaryExpression)
|
||||
{
|
||||
model.Args.Add(GetMethodCallArgs(parameter, item));
|
||||
|
||||
Reference in New Issue
Block a user