From e7b0271487bc7dbbcc135814986444a709ace23b Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Mon, 27 Feb 2017 01:03:56 +0800 Subject: [PATCH] - --- OrmTest/ExpressionTest/Join.cs | 30 +++++++++++++- OrmTest/Program.cs | 1 + .../SqlServerLambadaQueryBuilder.cs | 12 ++++++ .../Common/ResolveExpressType.cs | 3 +- .../ResolveItems/BaseResolve.cs | 10 +++-- .../ResolveItems/NewArrayExpessionResolve.cs | 40 +++++++++++++++++++ SqlSugar/SqlSugar.csproj | 2 + SqlSugar/SqlSugarAccessory.cs | 4 +- SqlSugar/SqlSugarClient.cs | 19 ++++----- 9 files changed, 105 insertions(+), 16 deletions(-) create mode 100644 SqlSugar/Databases/SqlServer/Db/SqlBuilder/SqlServerLambadaQueryBuilder.cs create mode 100644 SqlSugar/ExpressionsToSql/ResolveItems/NewArrayExpessionResolve.cs diff --git a/OrmTest/ExpressionTest/Join.cs b/OrmTest/ExpressionTest/Join.cs index 9f0506cc0..253514d00 100644 --- a/OrmTest/ExpressionTest/Join.cs +++ b/OrmTest/ExpressionTest/Join.cs @@ -3,10 +3,36 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; - +using SqlSugar; +using System.Linq.Expressions; +using OrmTest.Models; namespace OrmTest.ExpressionTest { - public class Join + public class Join : ExpTestBase { + private Join() { } + public Join(int eachCount) + { + this.Count = eachCount; + } + internal void Init() + { + base.Begin(); + for (int i = 0; i < base.Count; i++) + { + Q2(); + } + base.End("Method Test"); + } + + public void Q2() + { + ExpressionContext contet = new ExpressionContext(); + SqlSugarClient db = new SqlSugarClient(new SystemTablesConfig() { ConnectionString="x" ,DbType= DbType.SqlServer }); + db.Queryable((st,sc)=> new object[] { + JoinType.Left,st.SchoolId==sc.Id + }); + + } } } diff --git a/OrmTest/Program.cs b/OrmTest/Program.cs index 8c0504d95..c2ef30b5b 100644 --- a/OrmTest/Program.cs +++ b/OrmTest/Program.cs @@ -22,6 +22,7 @@ namespace OrmTest new OrmTest.ExpressionTest.Field(eachCount).Init(); new OrmTest.ExpressionTest.Where(eachCount).Init(); new OrmTest.ExpressionTest.Method(eachCount).Init(); + new OrmTest.ExpressionTest.Join(eachCount).Init(); } } } diff --git a/SqlSugar/Databases/SqlServer/Db/SqlBuilder/SqlServerLambadaQueryBuilder.cs b/SqlSugar/Databases/SqlServer/Db/SqlBuilder/SqlServerLambadaQueryBuilder.cs new file mode 100644 index 000000000..20994555a --- /dev/null +++ b/SqlSugar/Databases/SqlServer/Db/SqlBuilder/SqlServerLambadaQueryBuilder.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SqlSugar +{ + public class SqlServerLambadaQueryBuilder: LambadaQueryBuilder + { + } +} diff --git a/SqlSugar/ExpressionsToSql/Common/ResolveExpressType.cs b/SqlSugar/ExpressionsToSql/Common/ResolveExpressType.cs index b65f2492f..fc6002990 100644 --- a/SqlSugar/ExpressionsToSql/Common/ResolveExpressType.cs +++ b/SqlSugar/ExpressionsToSql/Common/ResolveExpressType.cs @@ -11,6 +11,7 @@ namespace SqlSugar SelectSingle=2, SelectMultiple=3, FieldSingle=4, - FieldMultiple=5 + FieldMultiple=5, + Join=6 } } diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs index 1b8b01a7d..1ef825449 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs @@ -91,16 +91,20 @@ namespace SqlSugar { return new NewExpressionResolve(parameter); } - else if (expression != null && expression.NodeType.IsIn(ExpressionType.NewArrayBounds, ExpressionType.NewArrayInit)) + else if (expression is NewArrayExpression) { - Check.ThrowNotSupportedException("ExpressionType.NewArrayBounds and ExpressionType.NewArrayInit"); + return new NewArrayExpessionResolve(parameter); + } + else if (expression != null && expression.NodeType.IsIn(ExpressionType.NewArrayBounds)) + { + Check.ThrowNotSupportedException("ExpressionType.NewArrayBounds"); } return null; } protected void AppendValue(ExpressionParameter parameter, bool? isLeft, object value) { - if (parameter.BaseExpression is BinaryExpression|| parameter.BaseExpression==null) + if (parameter.BaseExpression is BinaryExpression || parameter.BaseExpression == null) { var otherExpression = isLeft == true ? parameter.BaseParameter.RightExpression : parameter.BaseParameter.LeftExpression; if (parameter.Expression is MethodCallExpression) diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/NewArrayExpessionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/NewArrayExpessionResolve.cs new file mode 100644 index 000000000..f2df0ef91 --- /dev/null +++ b/SqlSugar/ExpressionsToSql/ResolveItems/NewArrayExpessionResolve.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Text; +using System.Threading.Tasks; + +namespace SqlSugar +{ + public class NewArrayExpessionResolve : BaseResolve + { + public NewArrayExpessionResolve(ExpressionParameter parameter) : base(parameter) + { + var expression = (NewArrayExpression)base.Expression; + switch (base.Context.ResolveType) + { + case ResolveExpressType.WhereSingle: + case ResolveExpressType.WhereMultiple: + case ResolveExpressType.SelectSingle: + case ResolveExpressType.SelectMultiple: + case ResolveExpressType.FieldSingle: + case ResolveExpressType.FieldMultiple: + Check.ThrowNotSupportedException("NewArrayExpression"); + break; + case ResolveExpressType.Join: + base.Context.ResolveType = ResolveExpressType.WhereMultiple; + foreach (var item in expression.Expressions) + { + var value = ((ConstantExpression)item).Value; + var isJoinType = value is JoinType; + //string value = ""; + //base.AppendValue(); + } + break; + default: + break; + } + } + } +} diff --git a/SqlSugar/SqlSugar.csproj b/SqlSugar/SqlSugar.csproj index e64f47863..a306e1fb9 100644 --- a/SqlSugar/SqlSugar.csproj +++ b/SqlSugar/SqlSugar.csproj @@ -82,6 +82,7 @@ + @@ -122,6 +123,7 @@ + diff --git a/SqlSugar/SqlSugarAccessory.cs b/SqlSugar/SqlSugarAccessory.cs index 6d8f61fbe..273ef5945 100644 --- a/SqlSugar/SqlSugarAccessory.cs +++ b/SqlSugar/SqlSugarAccessory.cs @@ -103,7 +103,9 @@ namespace SqlSugar protected List GetJoinInfos(Expression joinExpression, SqlSugarClient context) { - throw new NotImplementedException(); + ExpressionContext exp = new ExpressionContext(); + exp.Resolve(joinExpression, ResolveExpressType.Join); + return null; } } } diff --git a/SqlSugar/SqlSugarClient.cs b/SqlSugar/SqlSugarClient.cs index 3a3ba7fbe..965b26fbd 100644 --- a/SqlSugar/SqlSugarClient.cs +++ b/SqlSugar/SqlSugarClient.cs @@ -141,12 +141,13 @@ namespace SqlSugar } return (ISugarQueryable)_Queryable; } - public virtual List Queryable(Expression> joinExpression) where T : class, new() + public virtual ISugarQueryable Queryable(Expression> joinExpression) where T : class, new() { + var queryable = Queryable(); SqlBuilder.LambadaQueryBuilder.JoinQueryInfos = base.GetJoinInfos(joinExpression,this); - return null; + return queryable; } - public virtual List Queryable(Func joinExpression) where T : class, new() + public virtual ISugarQueryable Queryable(Func joinExpression) where T : class, new() { return null; } @@ -154,27 +155,27 @@ namespace SqlSugar { return null; } - public virtual List Queryable(Func joinExpression) where T : class, new() + public virtual ISugarQueryable Queryable(Func joinExpression) where T : class, new() { return null; } - public virtual List Queryable(Func joinExpression) where T : class, new() + public virtual ISugarQueryable Queryable(Func joinExpression) where T : class, new() { return null; } - public virtual List Queryable(Func joinExpression) where T : class, new() + public virtual ISugarQueryable Queryable(Func joinExpression) where T : class, new() { return null; } - public virtual List Queryable(Func joinExpression) where T : class, new() + public virtual ISugarQueryable Queryable(Func joinExpression) where T : class, new() { return null; } - public virtual List Queryable(Func joinExpression) where T : class, new() + public virtual ISugarQueryable Queryable(Func joinExpression) where T : class, new() { return null; } - public virtual List Queryable(Func joinExpression) where T : class, new() + public virtual ISugarQueryable Queryable(Func joinExpression) where T : class, new() { return null; }