Optimization

This commit is contained in:
sunkaixuan 2017-07-16 02:38:23 +08:00
parent 955c73e985
commit 842025d02c
12 changed files with 36 additions and 19 deletions

View File

@ -131,8 +131,8 @@ namespace OrmTest.Demo
int count = 0; int count = 0;
var list4 = db.Queryable<Student>() var list4 = db.Queryable<Student, School>((st, sc) => st.SchoolId == sc.Id)
.PartitionBy(it => new { it.Name }).Take(1).OrderBy(it=>it.Id).ToPageList(3,3,ref count); .PartitionBy(st => new { st.Name }).Take(1).OrderBy(st => st.Id,OrderByType.Desc).Select(st => st).ToPageList(1, 1000, ref count);
//SqlFunc.AggregateSum(object thisValue) //SqlFunc.AggregateSum(object thisValue)
//SqlFunc.AggregateAvg<TResult>(TResult thisValue) //SqlFunc.AggregateAvg<TResult>(TResult thisValue)

View File

@ -24,9 +24,24 @@ namespace OrmTest.UnitTest
Q2(); Q2();
Q3(); Q3();
Q4(); Q4();
q5();
} }
base.End("Method Test"); base.End("Method Test");
} }
private void q5()
{
using (var db = GetInstance())
{
db.MappingTables.Add("School", "SchoolTable");
var join5= db.Queryable<Student, School>((st, sc) => st.SchoolId == sc.Id).Select(st => st)
.GroupBy(st=> new{ st.Id,st.Name })
.ToSql();
string sql = @"SELECT st.* FROM [STudent] st ,[SchoolTable] sc WHERE ( [st].[SchoolId] = [sc].[Id] )GROUP BY [st].[ID],[st].[Name] ";
base.Check(sql, null, join5.Key, null, "join 5 Error");
}
}
private void Q4() private void Q4()
{ {
using (var db = GetInstance()) using (var db = GetInstance())

View File

@ -67,7 +67,7 @@ namespace SqlSugar
} }
public IInsertable<T> IgnoreColumns(Expression<Func<T, object>> columns) public IInsertable<T> IgnoreColumns(Expression<Func<T, object>> columns)
{ {
var ignoreColumns = InsertBuilder.GetExpressionValue(columns, ResolveExpressType.ArraySingle).GetResultArray(); var ignoreColumns = InsertBuilder.GetExpressionValue(columns, ResolveExpressType.ArraySingle).GetResultArray().Select(it => this.SqlBuilder.GetNoTranslationColumnName(it)).ToList();
this.InsertBuilder.DbColumnInfoList = this.InsertBuilder.DbColumnInfoList.Where(it => !ignoreColumns.Contains(it.PropertyName)).ToList(); this.InsertBuilder.DbColumnInfoList = this.InsertBuilder.DbColumnInfoList.Where(it => !ignoreColumns.Contains(it.PropertyName)).ToList();
return this; return this;
} }
@ -79,7 +79,7 @@ namespace SqlSugar
public IInsertable<T> InsertColumns(Expression<Func<T, object>> columns) public IInsertable<T> InsertColumns(Expression<Func<T, object>> columns)
{ {
var ignoreColumns = InsertBuilder.GetExpressionValue(columns, ResolveExpressType.ArraySingle).GetResultArray(); var ignoreColumns = InsertBuilder.GetExpressionValue(columns, ResolveExpressType.ArraySingle).GetResultArray().Select(it=>this.SqlBuilder.GetNoTranslationColumnName(it)).ToList();
this.InsertBuilder.DbColumnInfoList = this.InsertBuilder.DbColumnInfoList.Where(it => ignoreColumns.Contains(it.PropertyName)).ToList(); this.InsertBuilder.DbColumnInfoList = this.InsertBuilder.DbColumnInfoList.Where(it => ignoreColumns.Contains(it.PropertyName)).ToList();
return this; return this;
} }

View File

@ -564,7 +564,7 @@ namespace SqlSugar
if (expression is NewExpression) if (expression is NewExpression)
{ {
lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.ArraySingle : ResolveExpressType.ArrayMultiple); lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.ArraySingle : ResolveExpressType.ArrayMultiple);
result = string.Join(",", lamResult.GetResultArray().Select(it => this.SqlBuilder.GetTranslationColumnName(typeof(T).Name, it))); result = string.Join(",", lamResult.GetResultArray().Select(it => it));
} }
else else
{ {
@ -608,7 +608,7 @@ namespace SqlSugar
if (expression is NewExpression) if (expression is NewExpression)
{ {
lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.ArraySingle : ResolveExpressType.ArrayMultiple); lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.ArraySingle : ResolveExpressType.ArrayMultiple);
result = string.Join(",", lamResult.GetResultArray().Select(it => this.SqlBuilder.GetTranslationColumnName(typeof(T).Name, it))); result = string.Join(",", lamResult.GetResultArray());
} }
else else
{ {

View File

@ -256,13 +256,18 @@ namespace SqlSugar
if (externalOrderBy.IsNullOrEmpty()) { if (externalOrderBy.IsNullOrEmpty()) {
externalOrderBy = " ORDER BY GetDate() "; externalOrderBy = " ORDER BY GetDate() ";
} }
result = string.Format("SELECT *,ROW_NUMBER() OVER({0}) AS RowIndex2 FROM ({1}) ExternalTable ", externalOrderBy,result); result = string.Format("SELECT *,ROW_NUMBER() OVER({0}) AS RowIndex2 FROM ({1}) ExternalTable ", GetExternalOrderBy(externalOrderBy),result);
result = ToPageSql2(result,ExternalPageIndex, ExternalPageSize, true); result = ToPageSql2(result,ExternalPageIndex, ExternalPageSize, true);
} }
this.OrderByValue = oldOrderBy; this.OrderByValue = oldOrderBy;
return result; return result;
} }
public virtual string GetExternalOrderBy(string externalOrderBy)
{
return Regex.Replace(externalOrderBy, @"\[\w+\]\.", "");
}
public virtual string ToCountSql(string sql) public virtual string ToCountSql(string sql)
{ {

View File

@ -48,7 +48,7 @@ namespace SqlSugar
public IUpdateable<T> IgnoreColumns(Expression<Func<T, object>> columns) public IUpdateable<T> IgnoreColumns(Expression<Func<T, object>> columns)
{ {
var ignoreColumns = UpdateBuilder.GetExpressionValue(columns, ResolveExpressType.ArraySingle).GetResultArray(); var ignoreColumns = UpdateBuilder.GetExpressionValue(columns, ResolveExpressType.ArraySingle).GetResultArray().Select(it => this.SqlBuilder.GetNoTranslationColumnName(it)).ToList();
this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => !ignoreColumns.Contains(it.PropertyName)).ToList(); this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => !ignoreColumns.Contains(it.PropertyName)).ToList();
return this; return this;
} }
@ -77,7 +77,7 @@ namespace SqlSugar
public IUpdateable<T> UpdateColumns(Expression<Func<T, object>> columns) public IUpdateable<T> UpdateColumns(Expression<Func<T, object>> columns)
{ {
var updateColumns = UpdateBuilder.GetExpressionValue(columns, ResolveExpressType.ArraySingle).GetResultArray(); var updateColumns = UpdateBuilder.GetExpressionValue(columns, ResolveExpressType.ArraySingle).GetResultArray().Select(it => this.SqlBuilder.GetNoTranslationColumnName(it)).ToList();
List<string> primaryKeys = GetPrimaryKeys(); List<string> primaryKeys = GetPrimaryKeys();
foreach (var item in this.UpdateBuilder.DbColumnInfoList) foreach (var item in this.UpdateBuilder.DbColumnInfoList)
{ {

View File

@ -101,6 +101,7 @@ namespace SqlSugar
switch (this._ResolveExpressType) switch (this._ResolveExpressType)
{ {
case ResolveExpressType.ArraySingle: case ResolveExpressType.ArraySingle:
case ResolveExpressType.ArrayMultiple:
case ResolveExpressType.SelectSingle: case ResolveExpressType.SelectSingle:
case ResolveExpressType.SelectMultiple: case ResolveExpressType.SelectMultiple:
case ResolveExpressType.Update: case ResolveExpressType.Update:

View File

@ -103,8 +103,9 @@ namespace SqlSugar
fieldName = GetMultipleName(parameter, expression, isLeft); fieldName = GetMultipleName(parameter, expression, isLeft);
base.Context.Result.Append(fieldName); base.Context.Result.Append(fieldName);
break; break;
case ResolveExpressType.ArrayMultiple:
case ResolveExpressType.ArraySingle: case ResolveExpressType.ArraySingle:
fieldName = GetArrayName(parameter, expression, isLeft); fieldName = GetName(parameter, expression, isLeft,parameter.Context.ResolveType== ResolveExpressType.ArraySingle);
base.Context.Result.Append(fieldName); base.Context.Result.Append(fieldName);
break; break;
default: default:
@ -166,10 +167,5 @@ namespace SqlSugar
fieldName = Context.GetTranslationColumnName(fieldName); fieldName = Context.GetTranslationColumnName(fieldName);
return fieldName; return fieldName;
} }
private string GetArrayName(ExpressionParameter parameter, MemberExpression expression, bool? isLeft)
{
string fieldName = expression.Member.Name;
return fieldName;
}
} }
} }

View File

@ -28,7 +28,7 @@ namespace SqlSugar
case ResolveExpressType.FieldSingle: case ResolveExpressType.FieldSingle:
break; break;
case ResolveExpressType.FieldMultiple: case ResolveExpressType.FieldMultiple:
break; case ResolveExpressType.ArrayMultiple:
case ResolveExpressType.ArraySingle: case ResolveExpressType.ArraySingle:
foreach (var item in expression.Arguments) foreach (var item in expression.Arguments)
{ {

View File

@ -42,7 +42,7 @@ namespace SqlSugar
public override string GetNoTranslationColumnName(string name) public override string GetNoTranslationColumnName(string name)
{ {
if (!name.Contains("`")) return name; if (!name.Contains("`")) return name;
return name == null ? string.Empty : Regex.Match(name, @"\`(.*?)\`").Groups[1].Value; return name == null ? string.Empty : Regex.Match(name, @".*\`(.*?)\`").Groups[1].Value;
} }
} }
} }

View File

@ -45,7 +45,7 @@ namespace SqlSugar
public override string GetNoTranslationColumnName(string name) public override string GetNoTranslationColumnName(string name)
{ {
if (!name.Contains("[")) return name; if (!name.Contains("[")) return name;
return name == null ? string.Empty : Regex.Match(name, @"\[(.*?)\]").Groups[1].Value; return name == null ? string.Empty : Regex.Match(name, @".*\[(.*?)\]").Groups[1].Value;
} }
} }
} }

View File

@ -40,7 +40,7 @@ namespace SqlSugar
public override string GetNoTranslationColumnName(string name) public override string GetNoTranslationColumnName(string name)
{ {
if (!name.Contains("`")) return name; if (!name.Contains("`")) return name;
return name == null ? string.Empty : Regex.Match(name, @"\`(.*?)\`").Groups[1].Value; return name == null ? string.Empty : Regex.Match(name, @".*\`(.*?)\`").Groups[1].Value;
} }
} }
} }