This commit is contained in:
sunkaixuan
2017-01-14 23:10:36 +08:00
parent 508246eb4e
commit 92e0699c47
22 changed files with 94 additions and 31 deletions

Binary file not shown.

View File

@@ -0,0 +1,22 @@
using OrmTest.Models;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
namespace OrmTest.ExpressionTest
{
public class Field
{
internal static void Init()
{
Expression<Func<Student, object>> exp = it=>it.Name;
ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.FieldMultiple);
expContext.Resolve();
var selectorValue = expContext.Result.GetString();
}
}
}

View File

@@ -14,7 +14,7 @@ namespace OrmTest.ExpressionTest
internal static void Init() internal static void Init()
{ {
DateTime b = DateTime.Now; DateTime b = DateTime.Now;
int count = 10000; int count = 1;
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
single(); single();
@@ -29,8 +29,7 @@ namespace OrmTest.ExpressionTest
private static void Multiple() private static void Multiple()
{ {
Expression<Func<Student,School, object>> exp = (it,school) => new Student() { Name = "a", Id = it.Id, SchoolId = school.Id }; Expression<Func<Student,School, object>> exp = (it,school) => new Student() { Name = "a", Id = it.Id, SchoolId = school.Id };
ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.WhereSingle); ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.SelectMultiple);
expContext.ResolveType = ResolveExpressType.SelectMultiple;
expContext.Resolve(); expContext.Resolve();
var selectorValue = expContext.Result.GetString(); var selectorValue = expContext.Result.GetString();
var pars = expContext.Parameters; var pars = expContext.Parameters;
@@ -38,8 +37,7 @@ namespace OrmTest.ExpressionTest
private static void MultipleDynamic() private static void MultipleDynamic()
{ {
Expression<Func<Student, School, object>> exp = (it, school) => new{ Name = "a", Id = it.Id, SchoolId = school.Id }; Expression<Func<Student, School, object>> exp = (it, school) => new{ Name = "a", Id = it.Id, SchoolId = school.Id };
ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.WhereSingle); ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.SelectMultiple);
expContext.ResolveType = ResolveExpressType.SelectMultiple;
expContext.Resolve(); expContext.Resolve();
var selectorValue = expContext.Result.GetString(); var selectorValue = expContext.Result.GetString();
var pars = expContext.Parameters; var pars = expContext.Parameters;
@@ -48,8 +46,7 @@ namespace OrmTest.ExpressionTest
{ {
int p = 1; int p = 1;
Expression<Func<Student, object>> exp = it => new Student() { Name = "a", Id = it.Id, SchoolId = p }; Expression<Func<Student, object>> exp = it => new Student() { Name = "a", Id = it.Id, SchoolId = p };
ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.WhereSingle); ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.SelectSingle);
expContext.ResolveType = ResolveExpressType.SelectSingle;
expContext.Resolve(); expContext.Resolve();
var selectorValue = expContext.Result.GetString(); var selectorValue = expContext.Result.GetString();
var pars = expContext.Parameters; var pars = expContext.Parameters;
@@ -59,8 +56,7 @@ namespace OrmTest.ExpressionTest
{ {
string a = "a"; string a = "a";
Expression<Func<Student, object>> exp = it => new { x = it.Id, shoolid = 1, name = a }; Expression<Func<Student, object>> exp = it => new { x = it.Id, shoolid = 1, name = a };
ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.WhereSingle); ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.SelectSingle);
expContext.ResolveType = ResolveExpressType.SelectSingle;
expContext.Resolve(); expContext.Resolve();
var selectorValue = expContext.Result.GetString(); var selectorValue = expContext.Result.GetString();
var pars = expContext.Parameters; var pars = expContext.Parameters;

View File

@@ -43,6 +43,7 @@
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="ExpressionTest\Field.cs" />
<Compile Include="ExpressionTest\Select.cs" /> <Compile Include="ExpressionTest\Select.cs" />
<Compile Include="ExpressionTest\Where.cs" /> <Compile Include="ExpressionTest\Where.cs" />
<Compile Include="Models\School.cs" /> <Compile Include="Models\School.cs" />

View File

@@ -24,6 +24,7 @@ namespace OrmTest
OrmTest.ExpressionTest.Select.Init(); OrmTest.ExpressionTest.Select.Init();
OrmTest.ExpressionTest.Field.Init();
Program.id = "xx"; Program.id = "xx";

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

@@ -7,6 +7,11 @@ using System.Linq.Expressions;
using System.Text; using System.Text;
namespace SqlSugar namespace SqlSugar
{ {
///<summary>
/// ** descriptionExpression to sql
/// ** authorsunkaixuan
/// ** date2017/1/14
/// ** qq:610262374
public class ExpressionContext : ExpResolveAccessory public class ExpressionContext : ExpResolveAccessory
{ {
#region constructor #region constructor
@@ -24,7 +29,7 @@ namespace SqlSugar
#region properties #region properties
public IDbMethods DbMehtods { get; set; } public IDbMethods DbMehtods { get; set; }
public int Index { get; set; } public int Index { get; set; }
public ResolveExpressType ResolveType { get; set; } internal ResolveExpressType ResolveType { get; set; }
public Expression Expression { get; set; } public Expression Expression { get; set; }
public ExpressionResult Result public ExpressionResult Result
{ {

View File

@@ -13,6 +13,15 @@ namespace SqlSugar
var expression = base.Expression as ConstantExpression; var expression = base.Expression as ConstantExpression;
var isLeft = parameter.IsLeft; var isLeft = parameter.IsLeft;
object value = expression.Value; object value = expression.Value;
switch (parameter.Context.ResolveType)
{
case ResolveExpressType.WhereSingle:
case ResolveExpressType.WhereMultiple:
case ResolveExpressType.SelectSingle:
case ResolveExpressType.SelectMultiple:
case ResolveExpressType.FieldSingle:
case ResolveExpressType.FieldMultiple:
default:
if (parameter.BaseParameter.BinaryExpressionInfoList != null) if (parameter.BaseParameter.BinaryExpressionInfoList != null)
{ {
parameter.BaseParameter.BinaryExpressionInfoList.Add(new KeyValuePair<string, BinaryExpressionInfo>(ExpressionConst.BinaryExpressionInfoListKey, new BinaryExpressionInfo() parameter.BaseParameter.BinaryExpressionInfoList.Add(new KeyValuePair<string, BinaryExpressionInfo>(ExpressionConst.BinaryExpressionInfoListKey, new BinaryExpressionInfo()
@@ -22,6 +31,8 @@ namespace SqlSugar
ExpressionType = expression.GetType() ExpressionType = expression.GetType()
})); }));
} }
break;
}
} }
} }
} }

View File

@@ -14,6 +14,15 @@ namespace SqlSugar
var expression = base.Expression as MemberExpression; var expression = base.Expression as MemberExpression;
var isLeft = parameter.IsLeft; var isLeft = parameter.IsLeft;
object value = ExpressionTool.GetMemberValue(expression.Member, expression); object value = ExpressionTool.GetMemberValue(expression.Member, expression);
switch (parameter.Context.ResolveType)
{
case ResolveExpressType.WhereSingle:
case ResolveExpressType.WhereMultiple:
case ResolveExpressType.SelectSingle:
case ResolveExpressType.SelectMultiple:
case ResolveExpressType.FieldSingle:
case ResolveExpressType.FieldMultiple:
default:
if (parameter.BaseParameter.BinaryExpressionInfoList != null) if (parameter.BaseParameter.BinaryExpressionInfoList != null)
{ {
parameter.BaseParameter.BinaryExpressionInfoList.Add(new KeyValuePair<string, BinaryExpressionInfo>(ExpressionConst.BinaryExpressionInfoListKey, new BinaryExpressionInfo() parameter.BaseParameter.BinaryExpressionInfoList.Add(new KeyValuePair<string, BinaryExpressionInfo>(ExpressionConst.BinaryExpressionInfoListKey, new BinaryExpressionInfo()
@@ -23,6 +32,8 @@ namespace SqlSugar
ExpressionType = expression.Expression.GetType() ExpressionType = expression.Expression.GetType()
})); }));
} }
break;
}
} }
} }
} }

View File

@@ -15,29 +15,39 @@ namespace SqlSugar
switch (parameter.Context.ResolveType) switch (parameter.Context.ResolveType)
{ {
case ResolveExpressType.WhereSingle: case ResolveExpressType.WhereSingle:
fieldName = GetFieldNameByWhereSingle(parameter, expression, isLeft); fieldName = getSingleName(parameter, expression, isLeft);
base.Context.Result.Append(fieldName);
break; break;
case ResolveExpressType.WhereMultiple: case ResolveExpressType.WhereMultiple:
fieldName = GetFiledNameByWhereMultiple(parameter, expression, isLeft); fieldName = getMultipleName(parameter, expression, isLeft);
base.Context.Result.Append(fieldName);
break; break;
case ResolveExpressType.SelectSingle: case ResolveExpressType.SelectSingle:
fieldName = getSingleName(parameter, expression, isLeft);
base.Context.Result.Append(fieldName); base.Context.Result.Append(fieldName);
break; break;
case ResolveExpressType.SelectMultiple: case ResolveExpressType.SelectMultiple:
fieldName = getMultipleName(parameter, expression, isLeft);
base.Context.Result.Append(fieldName); base.Context.Result.Append(fieldName);
break; break;
case ResolveExpressType.FieldSingle: case ResolveExpressType.FieldSingle:
fieldName = getSingleName(parameter, expression, isLeft);
base.Context.Result.Append(fieldName);
break; break;
case ResolveExpressType.FieldMultiple: case ResolveExpressType.FieldMultiple:
fieldName = getMultipleName(parameter, expression, isLeft);
base.Context.Result.Append(fieldName);
break; break;
default: default:
break; break;
} }
} }
private string GetFiledNameByWhereMultiple(ExpressionParameter parameter, MemberExpression expression, bool? isLeft) private string getMultipleName(ExpressionParameter parameter, MemberExpression expression, bool? isLeft)
{ {
string fieldName = expression.Member.ToString(); string shortName = expression.Expression.ToString();
string fieldName = expression.Member.Name;
fieldName = shortName + "." + fieldName;
if (parameter.BaseParameter.BinaryExpressionInfoList != null) if (parameter.BaseParameter.BinaryExpressionInfoList != null)
parameter.BaseParameter.BinaryExpressionInfoList.Add(new KeyValuePair<string, BinaryExpressionInfo>(ExpressionConst.BinaryExpressionInfoListKey, new BinaryExpressionInfo() parameter.BaseParameter.BinaryExpressionInfoList.Add(new KeyValuePair<string, BinaryExpressionInfo>(ExpressionConst.BinaryExpressionInfoListKey, new BinaryExpressionInfo()
{ {
@@ -48,7 +58,7 @@ namespace SqlSugar
return fieldName; return fieldName;
} }
private string GetFieldNameByWhereSingle(ExpressionParameter parameter, MemberExpression expression, bool? isLeft) private string getSingleName(ExpressionParameter parameter, MemberExpression expression, bool? isLeft)
{ {
string fieldName = expression.Member.Name; string fieldName = expression.Member.Name;
if (parameter.BaseParameter.BinaryExpressionInfoList != null) if (parameter.BaseParameter.BinaryExpressionInfoList != null)

View File

@@ -53,6 +53,7 @@ namespace SqlSugar
} }
else else
{ {
var memberExpression = (MemberExpression)memberAssignment.Expression; var memberExpression = (MemberExpression)memberAssignment.Expression;
if (memberExpression.Expression.NodeType.IsIn(ExpressionType.Constant)) if (memberExpression.Expression.NodeType.IsIn(ExpressionType.Constant))
{ {
@@ -61,7 +62,7 @@ namespace SqlSugar
parameter.Context.Result.Append(parameterName); parameter.Context.Result.Append(parameterName);
this.Context.Parameters.Add(new SugarParameter(parameterName, value)); this.Context.Parameters.Add(new SugarParameter(parameterName, value));
} }
else else if (memberExpression.Expression.NodeType.IsIn(ExpressionType.Parameter))
{ {
var fieldNme = (memberExpression).Member.Name; var fieldNme = (memberExpression).Member.Name;
if (isSingle) if (isSingle)
@@ -71,9 +72,13 @@ namespace SqlSugar
else else
{ {
var shortName = memberExpression.Expression.ToString(); var shortName = memberExpression.Expression.ToString();
parameter.Context.Result.Append(shortName+"."+fieldNme); parameter.Context.Result.Append(shortName + "." + fieldNme);
} }
} }
else
{
Check.ThrowNotSupportedException(memberExpression.Expression.NodeType.ToString());
}
} }
} }
} }

View File

@@ -9,6 +9,7 @@ namespace SqlSugar
/// ** descriptionCreate database access object /// ** descriptionCreate database access object
/// ** authorsunkaixuan /// ** authorsunkaixuan
/// ** date2017/1/2 /// ** date2017/1/2
/// ** qq:610262374
/// </summary> /// </summary>
public partial class SqlSugarClient : SqlSugarAccessory, IDisposable public partial class SqlSugarClient : SqlSugarAccessory, IDisposable
{ {

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.