mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-08-24 16:18:47 +08:00
-
This commit is contained in:
parent
2ea4a63563
commit
a99c807ff8
Binary file not shown.
@ -13,11 +13,29 @@ namespace OrmTest.ExpressionTest
|
|||||||
{
|
{
|
||||||
internal static void Init()
|
internal static void Init()
|
||||||
{
|
{
|
||||||
Expression<Func<Student, object>> exp = it => new Program() { x = "a" };
|
|
||||||
|
o1();
|
||||||
|
o2();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void o1()
|
||||||
|
{
|
||||||
|
Expression<Func<Student, object>> exp = it => new Student() { Name = "a", Id=it.Id };
|
||||||
ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.WhereSingle);
|
ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.WhereSingle);
|
||||||
expContext.ResolveType = ResolveExpressType.SelectSingle;
|
expContext.ResolveType = ResolveExpressType.SelectSingle;
|
||||||
expContext.Resolve();
|
expContext.Resolve();
|
||||||
var x = expContext.Result.GetString();
|
var x = expContext.Result.GetString();
|
||||||
|
var pars = expContext.Parameters;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void o2()
|
||||||
|
{
|
||||||
|
Expression<Func<Student, object>> exp = it =>new { x = "a" };
|
||||||
|
ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.WhereSingle);
|
||||||
|
expContext.ResolveType = ResolveExpressType.SelectSingle;
|
||||||
|
expContext.Resolve();
|
||||||
|
var x = expContext.Result.GetString();
|
||||||
|
var pars = expContext.Parameters;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -87,9 +87,13 @@ namespace SqlSugar
|
|||||||
{
|
{
|
||||||
return new MemberInitExpressionResolve(parameter);
|
return new MemberInitExpressionResolve(parameter);
|
||||||
}
|
}
|
||||||
else if (exp != null && exp.NodeType.IsIn(ExpressionType.New, ExpressionType.NewArrayBounds, ExpressionType.NewArrayInit))
|
else if (exp is NewExpression)
|
||||||
{
|
{
|
||||||
Check.ThrowNotSupportedException("ExpressionType.New、ExpressionType.NewArrayBounds and ExpressionType.NewArrayInit");
|
return new NewExpressionResolve(parameter);
|
||||||
|
}
|
||||||
|
else if (exp != null && exp.NodeType.IsIn(ExpressionType.NewArrayBounds, ExpressionType.NewArrayInit))
|
||||||
|
{
|
||||||
|
Check.ThrowNotSupportedException("ExpressionType.NewArrayBounds and ExpressionType.NewArrayInit");
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,60 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace SqlSugar
|
||||||
|
{
|
||||||
|
public class NewExpressionResolve : BaseResolve
|
||||||
|
{
|
||||||
|
public NewExpressionResolve(ExpressionParameter parameter) : base(parameter)
|
||||||
|
{
|
||||||
|
var expression = base.Expression as NewExpression;
|
||||||
|
switch (parameter.Context.ResolveType)
|
||||||
|
{
|
||||||
|
case ResolveExpressType.WhereSingle:
|
||||||
|
break;
|
||||||
|
case ResolveExpressType.WhereMultiple:
|
||||||
|
break;
|
||||||
|
case ResolveExpressType.SelectSingle:
|
||||||
|
SelectSingle(expression, parameter);
|
||||||
|
break;
|
||||||
|
case ResolveExpressType.SelectMultiple:
|
||||||
|
break;
|
||||||
|
case ResolveExpressType.FieldSingle:
|
||||||
|
break;
|
||||||
|
case ResolveExpressType.FieldMultiple:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SelectSingle(NewExpression expression, ExpressionParameter parameter)
|
||||||
|
{
|
||||||
|
if (expression.Arguments != null)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
foreach (var item in expression.Arguments)
|
||||||
|
{
|
||||||
|
++i;
|
||||||
|
if (item.NodeType == ExpressionType.Constant)
|
||||||
|
{
|
||||||
|
var value = ((ConstantExpression)item).Value;
|
||||||
|
string parameterName = this.Context.SqlParameterKeyWord + "constant" + i;
|
||||||
|
parameter.Context.Result.Append(parameterName);
|
||||||
|
this.Context.Parameters.Add(new SugarParameter(parameterName, value));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var memberExpression = (MemberExpression)Expression;
|
||||||
|
var fieldNme = (memberExpression).Member.Name;
|
||||||
|
parameter.Context.Result.Append(fieldNme);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -125,6 +125,7 @@
|
|||||||
<Compile Include="ExpressionsToSql\ResolveItems\LambdaExpressionResolve.cs" />
|
<Compile Include="ExpressionsToSql\ResolveItems\LambdaExpressionResolve.cs" />
|
||||||
<Compile Include="ExpressionsToSql\ResolveItems\MemberExpressionResolve.cs" />
|
<Compile Include="ExpressionsToSql\ResolveItems\MemberExpressionResolve.cs" />
|
||||||
<Compile Include="ExpressionsToSql\ResolveItems\MethodCallExpressionResolve.cs" />
|
<Compile Include="ExpressionsToSql\ResolveItems\MethodCallExpressionResolve.cs" />
|
||||||
|
<Compile Include="ExpressionsToSql\ResolveItems\NewExpressionResolve.cs" />
|
||||||
<Compile Include="ExpressionsToSql\ResolveItems\UnaryExpressionResolve.cs" />
|
<Compile Include="ExpressionsToSql\ResolveItems\UnaryExpressionResolve.cs" />
|
||||||
<Compile Include="ExpressionsToSql\Common\ExpResolveAccessory.cs" />
|
<Compile Include="ExpressionsToSql\Common\ExpResolveAccessory.cs" />
|
||||||
<Compile Include="ExpressionsToSql\ExpressionContext.cs" />
|
<Compile Include="ExpressionsToSql\ExpressionContext.cs" />
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue
Block a user