Error prompts for optimizing aliases for multi-table queries

This commit is contained in:
610262374@qq.com 2018-11-24 00:40:27 +08:00
parent f6d3241d1d
commit 56a3591307
4 changed files with 61 additions and 0 deletions

View File

@ -120,7 +120,32 @@ namespace OrmTest.UnitTest
}, t7.Key, t7.Value, "select t7 Error");
#endregion
try
{
var t8 = db.Queryable<Student, School, School>((st, sc, sc2) => new object[] {
JoinType.Left,st.SchoolId==sc.Id,
JoinType.Left,sc2.Id==sc.Id
}).Where(st => st.Id > 0)
.Select<School>((st1) => new School() { Id = st1.Id }).ToList();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
try
{
var t8 = db.Queryable<Student, School>((st, sc) =>st.Id==sc.Id).Where(st => st.Id > 0)
.Select<School>((st1) => new School() { Id = st1.Id }).ToList();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}

View File

@ -984,6 +984,7 @@ namespace SqlSugar
}
protected ISugarQueryable<TResult> _Select<TResult>(Expression expression)
{
QueryBuilder.CheckExpression(expression,"Select");
this.Context.InitMppingInfo<TResult>();
var result = InstanceFactory.GetQueryable<TResult>(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<T> _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<T> _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<TResult>(Expression expression)
{
QueryBuilder.CheckExpression(expression, "Main");
var isSingle = QueryBuilder.IsSingle();
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
var result = Min<TResult>(lamResult.GetResultString());
@ -1035,12 +1040,14 @@ namespace SqlSugar
}
protected TResult _Avg<TResult>(Expression expression)
{
QueryBuilder.CheckExpression(expression, "Avg");
var isSingle = QueryBuilder.IsSingle();
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
return Avg<TResult>(lamResult.GetResultString());
}
protected TResult _Max<TResult>(Expression expression)
{
QueryBuilder.CheckExpression(expression, "Max");
var isSingle = QueryBuilder.IsSingle();
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
var reslut = Max<TResult>(lamResult.GetResultString());
@ -1049,6 +1056,7 @@ namespace SqlSugar
}
protected TResult _Sum<TResult>(Expression expression)
{
QueryBuilder.CheckExpression(expression, "Sum");
var isSingle = QueryBuilder.IsSingle();
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
var reslut = Sum<TResult>(lamResult.GetResultString());
@ -1083,6 +1091,7 @@ namespace SqlSugar
}
public ISugarQueryable<T> _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<T> _Having(Expression expression)
{
QueryBuilder.CheckExpression(expression, "Having");
var isSingle = QueryBuilder.IsSingle();
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.WhereSingle : ResolveExpressType.WhereMultiple);
Having(lamResult.GetResultString());

View File

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

View File

@ -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中的多表结果集变成单表这样就可以不限制别名一样");
}
}
}
}