Optimize your code

This commit is contained in:
sunkaixuan
2022-11-25 12:17:37 +08:00
parent 76afb212a8
commit e89ae94f7c
2 changed files with 63 additions and 54 deletions

View File

@@ -593,60 +593,7 @@ namespace SqlSugar
}
else if (method.Method.Name == "Select")
{
var exp = method.Arguments[1];
var newExp = (exp as LambdaExpression).Body;
var types = exp.Type.GetGenericArguments();
if (types != null && types.Length > 0)
{
var type = types[0];
var entityInfo = this.Context.EntityMaintenance.GetEntityInfo(type);
this.Context.InitMappingInfo(type);
Check.ExceptionEasy(newExp.Type != entityInfo.Type, $" new {newExp.Type.Name}is error ,use Select(it=>new {entityInfo.Type.Name})", $"new {newExp.Type.Name}是错误的请使用Select(it=>new {entityInfo.Type.Name})");
if (entityInfo.Columns.Count(x => x.Navigat != null) == 0)
{
result.SelectString = (" " + queryable.QueryBuilder.GetExpressionValue(exp, ResolveExpressType.SelectSingle).GetString());
}
else
{
var pkInfo = entityInfo.Columns.FirstOrDefault(x => x.IsPrimarykey);
result.SelectString = (" " + queryable.QueryBuilder.GetExpressionValue(exp, ResolveExpressType.SelectSingle).GetString());
if (pkInfo != null)
{
var pkName = pkInfo.DbColumnName;
AppColumns(result, queryable, pkName);
}
foreach (var nav in entityInfo.Columns.Where(x => x.Navigat != null && x.Navigat.NavigatType == NavigateType.OneToOne))
{
var navColumn = entityInfo.Columns.FirstOrDefault(it => it.PropertyName == nav.Navigat.Name);
if (navColumn != null)
{
AppColumns(result, queryable, navColumn.DbColumnName);
}
}
foreach (var nav in entityInfo.Columns.Where(x => x.Navigat != null && x.Navigat.NavigatType == NavigateType.OneToMany&& x.Navigat.Name2!=null))
{
var navColumn = entityInfo.Columns.FirstOrDefault(it => it.PropertyName == nav.Navigat.Name2);
if (navColumn != null)
{
AppColumns(result, queryable, navColumn.DbColumnName);
}
}
result.SelectString = result.SelectString.TrimStart(',');
if (result.SelectString == "")
{
result.SelectString = null;
}
}
if (properyName != null)
{
var fkColumnsInfo = entityInfo.Columns.FirstOrDefault(x => x.PropertyName == properyName);
if (fkColumnsInfo != null)
{
var fkName = fkColumnsInfo.DbColumnName;
AppColumns(result, queryable, fkName);
}
}
}
Select(properyName, result, method, queryable);
}
else if (method.Method.Name == "OrderByDescending")
{
@@ -706,6 +653,64 @@ namespace SqlSugar
return result;
}
private void Select(string properyName, SqlInfo result, MethodCallExpression method, ISugarQueryable<object> queryable)
{
var exp = method.Arguments[1];
var newExp = (exp as LambdaExpression).Body;
var types = exp.Type.GetGenericArguments();
if (types != null && types.Length > 0)
{
var type = types[0];
var entityInfo = this.Context.EntityMaintenance.GetEntityInfo(type);
this.Context.InitMappingInfo(type);
Check.ExceptionEasy(newExp.Type != entityInfo.Type, $" new {newExp.Type.Name}is error ,use Select(it=>new {entityInfo.Type.Name})", $"new {newExp.Type.Name}是错误的请使用Select(it=>new {entityInfo.Type.Name})");
if (entityInfo.Columns.Count(x => x.Navigat != null) == 0)
{
result.SelectString = (" " + queryable.QueryBuilder.GetExpressionValue(exp, ResolveExpressType.SelectSingle).GetString());
}
else
{
var pkInfo = entityInfo.Columns.FirstOrDefault(x => x.IsPrimarykey);
result.SelectString = (" " + queryable.QueryBuilder.GetExpressionValue(exp, ResolveExpressType.SelectSingle).GetString());
if (pkInfo != null)
{
var pkName = pkInfo.DbColumnName;
AppColumns(result, queryable, pkName);
}
foreach (var nav in entityInfo.Columns.Where(x => x.Navigat != null && x.Navigat.NavigatType == NavigateType.OneToOne))
{
var navColumn = entityInfo.Columns.FirstOrDefault(it => it.PropertyName == nav.Navigat.Name);
if (navColumn != null)
{
AppColumns(result, queryable, navColumn.DbColumnName);
}
}
foreach (var nav in entityInfo.Columns.Where(x => x.Navigat != null && x.Navigat.NavigatType == NavigateType.OneToMany && x.Navigat.Name2 != null))
{
var navColumn = entityInfo.Columns.FirstOrDefault(it => it.PropertyName == nav.Navigat.Name2);
if (navColumn != null)
{
AppColumns(result, queryable, navColumn.DbColumnName);
}
}
result.SelectString = result.SelectString.TrimStart(',');
if (result.SelectString == "")
{
result.SelectString = null;
}
}
if (properyName != null)
{
var fkColumnsInfo = entityInfo.Columns.FirstOrDefault(x => x.PropertyName == properyName);
if (fkColumnsInfo != null)
{
var fkName = fkColumnsInfo.DbColumnName;
AppColumns(result, queryable, fkName);
}
}
}
}
private static void SetTableShortName(SqlInfo result, ISugarQueryable<object> queryable)
{
if (queryable.QueryBuilder.TableShortName.HasValue()&& result.TableShortName.IsNullOrEmpty())

View File

@@ -9,6 +9,10 @@ namespace SqlSugar
{
public static class CommonExtensions
{
public static List<T> ToList<T>(this T thisValue,Func<T,T> action) where T:class,new()
{
return new List<T> { thisValue };
}
public static IEnumerable<T> WhereIF<T>(this IEnumerable<T> thisValue, bool isOk, Func<T, bool> predicate)
{
if (isOk)