This commit is contained in:
sunkaixuan 2017-01-14 19:35:22 +08:00
parent 2ea4a63563
commit a99c807ff8
16 changed files with 86 additions and 3 deletions

Binary file not shown.

View File

@ -13,11 +13,29 @@ namespace OrmTest.ExpressionTest
{
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);
expContext.ResolveType = ResolveExpressType.SelectSingle;
expContext.Resolve();
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.

View File

@ -87,9 +87,13 @@ namespace SqlSugar
{
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;
}

View File

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

View File

@ -125,6 +125,7 @@
<Compile Include="ExpressionsToSql\ResolveItems\LambdaExpressionResolve.cs" />
<Compile Include="ExpressionsToSql\ResolveItems\MemberExpressionResolve.cs" />
<Compile Include="ExpressionsToSql\ResolveItems\MethodCallExpressionResolve.cs" />
<Compile Include="ExpressionsToSql\ResolveItems\NewExpressionResolve.cs" />
<Compile Include="ExpressionsToSql\ResolveItems\UnaryExpressionResolve.cs" />
<Compile Include="ExpressionsToSql\Common\ExpResolveAccessory.cs" />
<Compile Include="ExpressionsToSql\ExpressionContext.cs" />

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.