diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs index 700f6f5ba..1ef8fd985 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs @@ -46,6 +46,23 @@ namespace SqlSugar return this.Context.EntityMaintenance.GetEntityInfo(); } } + public ISugarQueryable LeftJoin(Expression> joinExpression) + { + var result = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); + result.SqlBuilder = this.SqlBuilder; + result.Context = this.Context; + result.QueryBuilder.JoinQueryInfos.Add(GetJoinInfo(joinExpression,JoinType.Left)); + return result; + } + + public ISugarQueryable InnerJoin(Expression> joinExpression) + { + var result = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); + result.SqlBuilder = this.SqlBuilder; + result.Context = this.Context; + result.QueryBuilder.JoinQueryInfos.Add(GetJoinInfo(joinExpression, JoinType.Inner)); + return result; + } public void Clear() { QueryBuilder.Clear(); @@ -1578,6 +1595,30 @@ namespace SqlSugar } return result; } + protected JoinQueryInfo GetJoinInfo(Expression joinExpression,JoinType joinType) + { + QueryBuilder.CheckExpressionNew(joinExpression, "Join"); + QueryBuilder.JoinExpression = joinExpression; + var express= LambdaExpression.Lambda(joinExpression).Body; + var lastPareamter= (express as LambdaExpression).Parameters.Last(); + var expResult = this.QueryBuilder.GetExpressionValue(joinExpression, ResolveExpressType.WhereMultiple); + this.Context.InitMappingInfo(lastPareamter.Type); + var result= new JoinQueryInfo() + { + JoinIndex = QueryBuilder.JoinQueryInfos.Count, + JoinType = joinType, + JoinWhere = expResult.GetResultString(), + ShortName= lastPareamter.Name, + TableName=this.Context.EntityMaintenance.GetTableName(lastPareamter.Type) + }; + if (result.JoinIndex == 0) + { + var firstPareamter = (express as LambdaExpression).Parameters.First(); + this.QueryBuilder.TableShortName = firstPareamter.Name; + } + Check.Exception(result.JoinIndex > 10, ErrorMessage.GetThrowMessage("只支持12个表", "Only 12 tables are supported")); + return result; + } private void _CountEnd(MappingTableList expMapping) { @@ -2448,6 +2489,23 @@ namespace SqlSugar #region T2 public partial class QueryableProvider : QueryableProvider, ISugarQueryable { + public ISugarQueryable LeftJoin(Expression> joinExpression) + { + var result = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); + result.SqlBuilder = this.SqlBuilder; + result.Context = this.Context; + result.QueryBuilder.JoinQueryInfos.Add(GetJoinInfo(joinExpression, JoinType.Left)); + return result; + } + + public ISugarQueryable InnerJoin(Expression> joinExpression) + { + var result = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); + result.SqlBuilder = this.SqlBuilder; + result.Context = this.Context; + result.QueryBuilder.JoinQueryInfos.Add(GetJoinInfo(joinExpression, JoinType.Inner)); + return result; + } #region Where public new ISugarQueryable Where(Expression> expression) { @@ -2778,6 +2836,24 @@ namespace SqlSugar #region T3 public partial class QueryableProvider : QueryableProvider, ISugarQueryable { + public ISugarQueryable LeftJoin(Expression> joinExpression) + { + var result = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); + result.SqlBuilder = this.SqlBuilder; + result.Context = this.Context; + result.QueryBuilder.JoinQueryInfos.Add(GetJoinInfo(joinExpression, JoinType.Left)); + return result; + } + + public ISugarQueryable InnerJoin(Expression> joinExpression) + { + var result = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); + result.SqlBuilder = this.SqlBuilder; + result.Context = this.Context; + result.QueryBuilder.JoinQueryInfos.Add(GetJoinInfo(joinExpression, JoinType.Inner)); + return result; + } + #region Group public ISugarQueryable GroupBy(Expression> expression) { @@ -3170,6 +3246,24 @@ namespace SqlSugar #region T4 public partial class QueryableProvider : QueryableProvider, ISugarQueryable { + public ISugarQueryable LeftJoin(Expression> joinExpression) + { + var result = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); + result.SqlBuilder = this.SqlBuilder; + result.Context = this.Context; + result.QueryBuilder.JoinQueryInfos.Add(GetJoinInfo(joinExpression, JoinType.Left)); + return result; + } + + public ISugarQueryable InnerJoin(Expression> joinExpression) + { + var result = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); + result.SqlBuilder = this.SqlBuilder; + result.Context = this.Context; + result.QueryBuilder.JoinQueryInfos.Add(GetJoinInfo(joinExpression, JoinType.Inner)); + return result; + } + #region Where public new ISugarQueryable Where(Expression> expression) { @@ -3604,6 +3698,24 @@ namespace SqlSugar #region T5 public partial class QueryableProvider : QueryableProvider, ISugarQueryable { + public ISugarQueryable LeftJoin(Expression> joinExpression) + { + var result = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); + result.SqlBuilder = this.SqlBuilder; + result.Context = this.Context; + result.QueryBuilder.JoinQueryInfos.Add(GetJoinInfo(joinExpression, JoinType.Left)); + return result; + } + + public ISugarQueryable InnerJoin(Expression> joinExpression) + { + var result = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); + result.SqlBuilder = this.SqlBuilder; + result.Context = this.Context; + result.QueryBuilder.JoinQueryInfos.Add(GetJoinInfo(joinExpression, JoinType.Inner)); + return result; + } + #region Where public new ISugarQueryable Where(Expression> expression) { @@ -4000,6 +4112,23 @@ namespace SqlSugar #region T6 public partial class QueryableProvider : QueryableProvider, ISugarQueryable { + public ISugarQueryable LeftJoin(Expression> joinExpression) + { + var result = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); + result.SqlBuilder = this.SqlBuilder; + result.Context = this.Context; + result.QueryBuilder.JoinQueryInfos.Add(GetJoinInfo(joinExpression, JoinType.Left)); + return result; + } + + public ISugarQueryable InnerJoin(Expression> joinExpression) + { + var result = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); + result.SqlBuilder = this.SqlBuilder; + result.Context = this.Context; + result.QueryBuilder.JoinQueryInfos.Add(GetJoinInfo(joinExpression, JoinType.Inner)); + return result; + } #region Where public new ISugarQueryable Where(Expression> expression) { @@ -4432,6 +4561,23 @@ namespace SqlSugar #region T7 public partial class QueryableProvider : QueryableProvider, ISugarQueryable { + public ISugarQueryable LeftJoin(Expression> joinExpression) + { + var result = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); + result.SqlBuilder = this.SqlBuilder; + result.Context = this.Context; + result.QueryBuilder.JoinQueryInfos.Add(GetJoinInfo(joinExpression, JoinType.Left)); + return result; + } + + public ISugarQueryable InnerJoin(Expression> joinExpression) + { + var result = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); + result.SqlBuilder = this.SqlBuilder; + result.Context = this.Context; + result.QueryBuilder.JoinQueryInfos.Add(GetJoinInfo(joinExpression, JoinType.Inner)); + return result; + } #region Where public new ISugarQueryable Where(Expression> expression) { @@ -4855,6 +5001,23 @@ namespace SqlSugar #region T8 public partial class QueryableProvider : QueryableProvider, ISugarQueryable { + public ISugarQueryable LeftJoin(Expression> joinExpression) + { + var result = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); + result.SqlBuilder = this.SqlBuilder; + result.Context = this.Context; + result.QueryBuilder.JoinQueryInfos.Add(GetJoinInfo(joinExpression, JoinType.Left)); + return result; + } + + public ISugarQueryable InnerJoin(Expression> joinExpression) + { + var result = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); + result.SqlBuilder = this.SqlBuilder; + result.Context = this.Context; + result.QueryBuilder.JoinQueryInfos.Add(GetJoinInfo(joinExpression, JoinType.Inner)); + return result; + } #region Where public new ISugarQueryable Where(Expression> expression) { @@ -5311,6 +5474,23 @@ namespace SqlSugar #region T9 public partial class QueryableProvider : QueryableProvider, ISugarQueryable { + public ISugarQueryable LeftJoin(Expression> joinExpression) + { + var result = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); + result.SqlBuilder = this.SqlBuilder; + result.Context = this.Context; + result.QueryBuilder.JoinQueryInfos.Add(GetJoinInfo(joinExpression, JoinType.Left)); + return result; + } + + public ISugarQueryable InnerJoin(Expression> joinExpression) + { + var result = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); + result.SqlBuilder = this.SqlBuilder; + result.Context = this.Context; + result.QueryBuilder.JoinQueryInfos.Add(GetJoinInfo(joinExpression, JoinType.Inner)); + return result; + } #region Where public new ISugarQueryable Where(Expression> expression) { @@ -5703,6 +5883,23 @@ namespace SqlSugar #region T10 public partial class QueryableProvider : QueryableProvider, ISugarQueryable { + public ISugarQueryable LeftJoin(Expression> joinExpression) + { + var result = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); + result.SqlBuilder = this.SqlBuilder; + result.Context = this.Context; + result.QueryBuilder.JoinQueryInfos.Add(GetJoinInfo(joinExpression, JoinType.Left)); + return result; + } + + public ISugarQueryable InnerJoin(Expression> joinExpression) + { + var result = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); + result.SqlBuilder = this.SqlBuilder; + result.Context = this.Context; + result.QueryBuilder.JoinQueryInfos.Add(GetJoinInfo(joinExpression, JoinType.Inner)); + return result; + } #region Where public new ISugarQueryable Where(Expression> expression) { @@ -6119,6 +6316,23 @@ namespace SqlSugar #region T11 public partial class QueryableProvider : QueryableProvider, ISugarQueryable { + public ISugarQueryable LeftJoin(Expression> joinExpression) + { + var result = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); + result.SqlBuilder = this.SqlBuilder; + result.Context = this.Context; + result.QueryBuilder.JoinQueryInfos.Add(GetJoinInfo(joinExpression, JoinType.Left)); + return result; + } + + public ISugarQueryable InnerJoin(Expression> joinExpression) + { + var result = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); + result.SqlBuilder = this.SqlBuilder; + result.Context = this.Context; + result.QueryBuilder.JoinQueryInfos.Add(GetJoinInfo(joinExpression, JoinType.Inner)); + return result; + } #region Where public new ISugarQueryable Where(Expression> expression) { diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs index b0aedbf7e..32ff4c5cd 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs @@ -701,5 +701,33 @@ namespace SqlSugar } } } + public void CheckExpressionNew(Expression expression, string methodName) + { + if (IsSingle() == false && this.JoinExpression != null) + { + var jsoinParameters = (this.JoinExpression as LambdaExpression).Parameters; + var currentParametres = (expression as LambdaExpression).Parameters; + if ((expression as LambdaExpression).Body.ToString() == "True") + { + return; + } + if (currentParametres != null && currentParametres.Count > 0) + { + if (jsoinParameters.Count + 1 != currentParametres.Count) + { + var str1 = "(" + string.Join(",", currentParametres.Select(it => it.Name)) + ")=>"; + var str2 = "("+string.Join(",", jsoinParameters.Select(it => it.Name))+","+ currentParametres.Last().Type.Name + " )=>"; + throw new Exception(ErrorMessage.GetThrowMessage($"Join {currentParametres.Last().Type.Name} error , Please change {str1} to {str2}.", $"Join {currentParametres.Last().Type.Name} 错误, 请把 {str1} 改成 {str2} ")); + } + foreach (var item in currentParametres.Take(jsoinParameters.Count)) + { + var index = currentParametres.IndexOf(item); + var name = item.Name; + var joinName = jsoinParameters[index].Name; + Check.Exception(name.ToLower() != joinName.ToLower(), ErrorMessage.ExpressionCheck, joinName, methodName, name); + } + } + } + } } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IQueryable.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IQueryable.cs index 540f05bfd..d3a4771bc 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IQueryable.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IQueryable.cs @@ -19,6 +19,8 @@ namespace SqlSugar ISugarQueryable AS(string tableName); ISugarQueryable AS(string tableName); ISugarQueryable With(string withString); + ISugarQueryable LeftJoin(Expression> joinExpression); + ISugarQueryable InnerJoin(Expression> joinExpression); ISugarQueryable Filter(string FilterName, bool isDisabledGobalFilter = false); ISugarQueryable Mapper(Action mapperAction); ISugarQueryable Mapper(Expression> expression); @@ -179,6 +181,9 @@ namespace SqlSugar } public partial interface ISugarQueryable : ISugarQueryable { + ISugarQueryable LeftJoin(Expression> joinExpression); + ISugarQueryable InnerJoin(Expression> joinExpression); + #region Where new ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); @@ -264,6 +269,9 @@ namespace SqlSugar } public partial interface ISugarQueryable : ISugarQueryable { + ISugarQueryable LeftJoin(Expression> joinExpression); + ISugarQueryable InnerJoin(Expression> joinExpression); + #region Where new ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); @@ -360,6 +368,9 @@ namespace SqlSugar } public partial interface ISugarQueryable : ISugarQueryable { + ISugarQueryable LeftJoin(Expression> joinExpression); + ISugarQueryable InnerJoin(Expression> joinExpression); + #region Where new ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); @@ -463,6 +474,9 @@ namespace SqlSugar } public partial interface ISugarQueryable : ISugarQueryable { + ISugarQueryable LeftJoin(Expression> joinExpression); + ISugarQueryable InnerJoin(Expression> joinExpression); + #region Where new ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); @@ -562,6 +576,9 @@ namespace SqlSugar } public partial interface ISugarQueryable : ISugarQueryable { + ISugarQueryable LeftJoin(Expression> joinExpression); + ISugarQueryable InnerJoin(Expression> joinExpression); + #region Where new ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); @@ -668,6 +685,9 @@ namespace SqlSugar } public partial interface ISugarQueryable : ISugarQueryable { + ISugarQueryable LeftJoin(Expression> joinExpression); + ISugarQueryable InnerJoin(Expression> joinExpression); + #region Where new ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); @@ -773,6 +793,9 @@ namespace SqlSugar } public partial interface ISugarQueryable : ISugarQueryable { + ISugarQueryable LeftJoin(Expression> joinExpression); + ISugarQueryable InnerJoin(Expression> joinExpression); + #region Where new ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); @@ -886,6 +909,9 @@ namespace SqlSugar #region 9-12 public partial interface ISugarQueryable : ISugarQueryable { + ISugarQueryable LeftJoin(Expression> joinExpression); + ISugarQueryable InnerJoin(Expression> joinExpression); + #region Where new ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); @@ -977,6 +1003,9 @@ namespace SqlSugar } public partial interface ISugarQueryable : ISugarQueryable { + ISugarQueryable LeftJoin(Expression> joinExpression); + ISugarQueryable InnerJoin(Expression> joinExpression); + #region Where new ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); @@ -1073,6 +1102,9 @@ namespace SqlSugar } public partial interface ISugarQueryable : ISugarQueryable { + ISugarQueryable LeftJoin(Expression> joinExpression); + ISugarQueryable InnerJoin(Expression> joinExpression); + #region Where new ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); @@ -1174,6 +1206,7 @@ namespace SqlSugar } public partial interface ISugarQueryable : ISugarQueryable { + #region Where new ISugarQueryable Where(Expression> expression); ISugarQueryable Where(Expression> expression); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarForCore.nuspec b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarForCore.nuspec index 19977161d..9e556d20b 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarForCore.nuspec +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarForCore.nuspec @@ -2,7 +2,7 @@ SqlSugarCore - 5.0.4.1-perview-02 + 5.0.4.1-perview-03 sunkaixuan Landa http://www.apache.org/licenses/LICENSE-2.0.html diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarForCoreNoDrive.nuspec b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarForCoreNoDrive.nuspec index 01725c58b..17e64f4c0 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarForCoreNoDrive.nuspec +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarForCoreNoDrive.nuspec @@ -2,7 +2,7 @@ SqlSugarCoreNoDrive - 5.0.4.1-perview-02 + 5.0.4.1-perview-03 sunkaixuan Landa http://www.apache.org/licenses/LICENSE-2.0.html diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/ErrorMessage.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/ErrorMessage.cs index 41c710b6f..a72192ca0 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/ErrorMessage.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/ErrorMessage.cs @@ -45,8 +45,8 @@ namespace SqlSugar { List formatArgs = new List() { enMessage, cnMessage }; formatArgs.AddRange(args); - return string.Format(@"English Message : {0} -Chinese Message : {1}", formatArgs.ToArray()); + return string.Format(@"中文提示 : {1} +Chinese Message : {0}", formatArgs.ToArray()); } } }