diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/Query/SelectQuery.cs b/Src/Asp.Net/SqlServerTest/UnitTest/Query/SelectQuery.cs index 736e35b72..d842199a7 100644 --- a/Src/Asp.Net/SqlServerTest/UnitTest/Query/SelectQuery.cs +++ b/Src/Asp.Net/SqlServerTest/UnitTest/Query/SelectQuery.cs @@ -120,7 +120,32 @@ namespace OrmTest.UnitTest }, t7.Key, t7.Value, "select t7 Error"); #endregion + try + { + var t8 = db.Queryable((st, sc, sc2) => new object[] { + JoinType.Left,st.SchoolId==sc.Id, + JoinType.Left,sc2.Id==sc.Id + }).Where(st => st.Id > 0) + .Select((st1) => new School() { Id = st1.Id }).ToList(); + } + catch (Exception ex) + { + + Console.WriteLine(ex.Message); + } + + try + { + + var t8 = db.Queryable((st, sc) =>st.Id==sc.Id).Where(st => st.Id > 0) + .Select((st1) => new School() { Id = st1.Id }).ToList(); + } + catch (Exception ex) + { + + Console.WriteLine(ex.Message); + } } } } diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs index 63efc523a..456092efd 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs @@ -984,6 +984,7 @@ namespace SqlSugar } protected ISugarQueryable _Select(Expression expression) { + QueryBuilder.CheckExpression(expression,"Select"); this.Context.InitMppingInfo(); var result = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); result.Context = this.Context; @@ -994,12 +995,14 @@ namespace SqlSugar } protected void _Where(Expression expression) { + QueryBuilder.CheckExpression(expression, "Where"); var isSingle = QueryBuilder.IsSingle(); var result = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.WhereSingle : ResolveExpressType.WhereMultiple); QueryBuilder.WhereInfos.Add(SqlBuilder.AppendWhereOrAnd(QueryBuilder.WhereInfos.IsNullOrEmpty(), result.GetResultString())); } protected ISugarQueryable _OrderBy(Expression expression, OrderByType type = OrderByType.Asc) { + QueryBuilder.CheckExpression(expression, "OrderBy"); var isSingle = QueryBuilder.IsSingle(); var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple); OrderBy(lamResult.GetResultString() + UtilConstants.Space + type.ToString().ToUpper()); @@ -1007,6 +1010,7 @@ namespace SqlSugar } protected ISugarQueryable _GroupBy(Expression expression) { + QueryBuilder.CheckExpression(expression, "GroupBy"); LambdaExpression lambda = expression as LambdaExpression; expression = lambda.Body; var isSingle = QueryBuilder.IsSingle(); @@ -1027,6 +1031,7 @@ namespace SqlSugar } protected TResult _Min(Expression expression) { + QueryBuilder.CheckExpression(expression, "Main"); var isSingle = QueryBuilder.IsSingle(); var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple); var result = Min(lamResult.GetResultString()); @@ -1035,12 +1040,14 @@ namespace SqlSugar } protected TResult _Avg(Expression expression) { + QueryBuilder.CheckExpression(expression, "Avg"); var isSingle = QueryBuilder.IsSingle(); var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple); return Avg(lamResult.GetResultString()); } protected TResult _Max(Expression expression) { + QueryBuilder.CheckExpression(expression, "Max"); var isSingle = QueryBuilder.IsSingle(); var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple); var reslut = Max(lamResult.GetResultString()); @@ -1049,6 +1056,7 @@ namespace SqlSugar } protected TResult _Sum(Expression expression) { + QueryBuilder.CheckExpression(expression, "Sum"); var isSingle = QueryBuilder.IsSingle(); var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple); var reslut = Sum(lamResult.GetResultString()); @@ -1083,6 +1091,7 @@ namespace SqlSugar } public ISugarQueryable _PartitionBy(Expression expression) { + QueryBuilder.CheckExpression(expression, "PartitionBy"); LambdaExpression lambda = expression as LambdaExpression; expression = lambda.Body; var isSingle = QueryBuilder.IsSingle(); @@ -1103,6 +1112,7 @@ namespace SqlSugar } protected ISugarQueryable _Having(Expression expression) { + QueryBuilder.CheckExpression(expression, "Having"); var isSingle = QueryBuilder.IsSingle(); var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.WhereSingle : ResolveExpressType.WhereMultiple); Having(lamResult.GetResultString()); diff --git a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs index a38e72a4e..08447dc50 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs @@ -508,5 +508,24 @@ namespace SqlSugar var result = this.Context.EntityMaintenance.GetTableName(entityName); return this.Builder.GetTranslationTableName(result); } + + public void CheckExpression(Expression expression, string methodName) + { + if (IsSingle() == false&& this.JoinExpression!=null) + { + var jsoinParameters = (this.JoinExpression as LambdaExpression).Parameters; + var currentParametres = (expression as LambdaExpression).Parameters; + if (currentParametres != null && currentParametres.Count > 0) + { + foreach (var item in currentParametres) + { + 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.Net/SqlSugar/ExpressionsToSql/Common/ErrorMessage.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/ErrorMessage.cs index fe73cb1e0..8953e6c32 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/ErrorMessage.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/ErrorMessage.cs @@ -37,5 +37,12 @@ namespace SqlSugar return ErrorMessage.GetThrowMessage("Connection open error . {0}", " 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,实在找不到原因请先Google错误信息:{0}."); } } + public static string ExpressionCheck + { + get + { + return ErrorMessage.GetThrowMessage("Join {0} needs to be the same as {1} {2}", "别名不一致错误,{1}中的{2}需要和Join {0}中的名称一致,特殊需求可以使用.Select((x,y)=>new{{ id=x.id,name=y.name}}).MergeTable().Orderby(xxx=>xxx.Id)功能将Select中的多表结果集变成单表,这样就可以不限制别名一样"); + } + } } }