mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-09-20 02:29:39 +08:00
Update nav query
This commit is contained in:
@@ -13,7 +13,8 @@ namespace SqlSugar
|
||||
{
|
||||
List<TResult> result = new List <TResult>();
|
||||
var isSqlFunc = IsSqlFunc(expression, queryableProvider);
|
||||
if (isSqlFunc&&isGroup(expression, queryableProvider))
|
||||
var isClass = IsClass(expression, queryableProvider);
|
||||
if (isSqlFunc && isGroup(expression, queryableProvider))
|
||||
{
|
||||
var sqlfuncQueryable = queryableProvider.Clone();
|
||||
sqlfuncQueryable.QueryBuilder.Includes = null;
|
||||
@@ -21,12 +22,71 @@ namespace SqlSugar
|
||||
.Select(expression)
|
||||
.ToList();
|
||||
var includeQueryable = queryableProvider.Clone();
|
||||
includeQueryable.Select(GetGroupSelect(typeof(T), queryableProvider.Context,queryableProvider.QueryBuilder));
|
||||
includeQueryable.QueryBuilder.NoCheckInclude=true;
|
||||
includeQueryable.Select(GetGroupSelect(typeof(T), queryableProvider.Context, queryableProvider.QueryBuilder));
|
||||
includeQueryable.QueryBuilder.NoCheckInclude = true;
|
||||
MegerList(result, includeQueryable.ToList(), sqlfuncQueryable.Context);
|
||||
}
|
||||
else if (isSqlFunc)
|
||||
{
|
||||
result = SqlFunc(expression, queryableProvider);
|
||||
}
|
||||
else if (typeof(TResult).IsAnonymousType() && isClass == false)
|
||||
{
|
||||
result = SqlFunc(expression, queryableProvider);
|
||||
}
|
||||
else if (typeof(TResult).IsAnonymousType() && isClass == true)
|
||||
{
|
||||
result = Action(expression, queryableProvider);
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
result = SqlFunc(expression, queryableProvider);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
try
|
||||
{
|
||||
result = Action(expression, queryableProvider);
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
throw ex;
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private static List<TResult> Action<T, TResult>(Expression<Func<T, TResult>> expression, QueryableProvider<T> queryableProvider)
|
||||
{
|
||||
List<TResult> result;
|
||||
var entity = queryableProvider.Context.EntityMaintenance.GetEntityInfo<TResult>();
|
||||
var list = queryableProvider.Clone().ToList();
|
||||
var dt=queryableProvider.Context.Utilities.ListToDataTable(list);
|
||||
foreach (System.Data.DataRow item in dt.Rows)
|
||||
{
|
||||
foreach (System.Data.DataColumn columnInfo in dt.Columns)
|
||||
{
|
||||
if (columnInfo.DataType.IsClass())
|
||||
{
|
||||
if (item[columnInfo.ColumnName] == null || item[columnInfo.ColumnName] == DBNull.Value)
|
||||
{
|
||||
item[columnInfo.ColumnName] = Activator.CreateInstance(columnInfo.DataType, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
list = queryableProvider.Context.Utilities.DataTableToList<T>(dt);
|
||||
result = list.Select(expression.Compile()).ToList();
|
||||
return result;
|
||||
}
|
||||
|
||||
private static List<TResult> SqlFunc<T, TResult>(Expression<Func<T, TResult>> expression, QueryableProvider<T> queryableProvider)
|
||||
{
|
||||
List<TResult> result;
|
||||
var sqlfuncQueryable = queryableProvider.Clone();
|
||||
sqlfuncQueryable.QueryBuilder.Includes = null;
|
||||
result = sqlfuncQueryable
|
||||
@@ -34,13 +94,9 @@ namespace SqlSugar
|
||||
.ToList();
|
||||
var includeList = queryableProvider.Clone().ToList();
|
||||
MegerList(result, includeList, sqlfuncQueryable.Context);
|
||||
}
|
||||
else
|
||||
{
|
||||
result= queryableProvider.ToList().Select(expression.Compile()).ToList();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static async Task<List<TResult>> GetListAsync<T, TResult>(Expression<Func<T, TResult>> expression, QueryableProvider<T> queryableProvider)
|
||||
{
|
||||
List<TResult> result = new List<TResult>();
|
||||
@@ -121,6 +177,26 @@ namespace SqlSugar
|
||||
i++;
|
||||
}
|
||||
}
|
||||
private static bool IsClass<T, TResult>(Expression<Func<T, TResult>> expression, QueryableProvider<T> queryableProvider)
|
||||
{
|
||||
var body = ExpressionTool.GetLambdaExpressionBody(expression);
|
||||
if (body is NewExpression)
|
||||
{
|
||||
var newExp = ((NewExpression)body);
|
||||
foreach (var item in newExp.Arguments)
|
||||
{
|
||||
if (item is MemberExpression)
|
||||
{
|
||||
var member = (MemberExpression)item;
|
||||
if (member.Type.IsClass())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static bool IsSqlFunc<T, TResult>(Expression<Func<T, TResult>> expression, QueryableProvider<T> queryableProvider)
|
||||
{
|
||||
|
@@ -1990,7 +1990,12 @@ namespace SqlSugar
|
||||
{
|
||||
if (this.QueryBuilder.Includes!=null&&this.QueryBuilder.Includes.Count > 0)
|
||||
{
|
||||
var list = this.ToPageList(pageIndex,pageSize,ref totalNumber).Select(expression.Compile()).ToList();
|
||||
if (pageIndex == 0)
|
||||
pageIndex = 1;
|
||||
var list = this.Clone().Skip(pageIndex-1*pageSize).Take(pageSize).ToList(expression);
|
||||
var countQueryable = this.Clone();
|
||||
countQueryable.QueryBuilder.Includes = null;
|
||||
totalNumber = countQueryable.Count();
|
||||
return list;
|
||||
}
|
||||
else
|
||||
@@ -2272,8 +2277,12 @@ namespace SqlSugar
|
||||
{
|
||||
if (this.QueryBuilder.Includes!=null&&this.QueryBuilder.Includes.Count > 0)
|
||||
{
|
||||
var pList = await this.ToPageListAsync(pageIndex, pageSize, totalNumber);
|
||||
var list = pList.Select(expression.Compile()).ToList();
|
||||
if (pageIndex == 0)
|
||||
pageIndex = 1;
|
||||
var list =await this.Clone().Skip(pageIndex - 1 * pageSize).Take(pageSize).ToListAsync(expression);
|
||||
var countQueryable = this.Clone();
|
||||
countQueryable.QueryBuilder.Includes = null;
|
||||
totalNumber.Value =await countQueryable.CountAsync();
|
||||
return list;
|
||||
}
|
||||
else
|
||||
|
@@ -13,7 +13,8 @@ namespace SqlSugar
|
||||
{
|
||||
List<TResult> result = new List <TResult>();
|
||||
var isSqlFunc = IsSqlFunc(expression, queryableProvider);
|
||||
if (isSqlFunc&&isGroup(expression, queryableProvider))
|
||||
var isClass = IsClass(expression, queryableProvider);
|
||||
if (isSqlFunc && isGroup(expression, queryableProvider))
|
||||
{
|
||||
var sqlfuncQueryable = queryableProvider.Clone();
|
||||
sqlfuncQueryable.QueryBuilder.Includes = null;
|
||||
@@ -21,12 +22,71 @@ namespace SqlSugar
|
||||
.Select(expression)
|
||||
.ToList();
|
||||
var includeQueryable = queryableProvider.Clone();
|
||||
includeQueryable.Select(GetGroupSelect(typeof(T), queryableProvider.Context,queryableProvider.QueryBuilder));
|
||||
includeQueryable.QueryBuilder.NoCheckInclude=true;
|
||||
includeQueryable.Select(GetGroupSelect(typeof(T), queryableProvider.Context, queryableProvider.QueryBuilder));
|
||||
includeQueryable.QueryBuilder.NoCheckInclude = true;
|
||||
MegerList(result, includeQueryable.ToList(), sqlfuncQueryable.Context);
|
||||
}
|
||||
else if (isSqlFunc)
|
||||
{
|
||||
result = SqlFunc(expression, queryableProvider);
|
||||
}
|
||||
else if (typeof(TResult).IsAnonymousType() && isClass == false)
|
||||
{
|
||||
result = SqlFunc(expression, queryableProvider);
|
||||
}
|
||||
else if (typeof(TResult).IsAnonymousType() && isClass == true)
|
||||
{
|
||||
result = Action(expression, queryableProvider);
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
result = SqlFunc(expression, queryableProvider);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
try
|
||||
{
|
||||
result = Action(expression, queryableProvider);
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
throw ex;
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private static List<TResult> Action<T, TResult>(Expression<Func<T, TResult>> expression, QueryableProvider<T> queryableProvider)
|
||||
{
|
||||
List<TResult> result;
|
||||
var entity = queryableProvider.Context.EntityMaintenance.GetEntityInfo<TResult>();
|
||||
var list = queryableProvider.Clone().ToList();
|
||||
var dt=queryableProvider.Context.Utilities.ListToDataTable(list);
|
||||
foreach (System.Data.DataRow item in dt.Rows)
|
||||
{
|
||||
foreach (System.Data.DataColumn columnInfo in dt.Columns)
|
||||
{
|
||||
if (columnInfo.DataType.IsClass())
|
||||
{
|
||||
if (item[columnInfo.ColumnName] == null || item[columnInfo.ColumnName] == DBNull.Value)
|
||||
{
|
||||
item[columnInfo.ColumnName] = Activator.CreateInstance(columnInfo.DataType, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
list = queryableProvider.Context.Utilities.DataTableToList<T>(dt);
|
||||
result = list.Select(expression.Compile()).ToList();
|
||||
return result;
|
||||
}
|
||||
|
||||
private static List<TResult> SqlFunc<T, TResult>(Expression<Func<T, TResult>> expression, QueryableProvider<T> queryableProvider)
|
||||
{
|
||||
List<TResult> result;
|
||||
var sqlfuncQueryable = queryableProvider.Clone();
|
||||
sqlfuncQueryable.QueryBuilder.Includes = null;
|
||||
result = sqlfuncQueryable
|
||||
@@ -34,13 +94,9 @@ namespace SqlSugar
|
||||
.ToList();
|
||||
var includeList = queryableProvider.Clone().ToList();
|
||||
MegerList(result, includeList, sqlfuncQueryable.Context);
|
||||
}
|
||||
else
|
||||
{
|
||||
result= queryableProvider.ToList().Select(expression.Compile()).ToList();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static async Task<List<TResult>> GetListAsync<T, TResult>(Expression<Func<T, TResult>> expression, QueryableProvider<T> queryableProvider)
|
||||
{
|
||||
List<TResult> result = new List<TResult>();
|
||||
@@ -121,6 +177,26 @@ namespace SqlSugar
|
||||
i++;
|
||||
}
|
||||
}
|
||||
private static bool IsClass<T, TResult>(Expression<Func<T, TResult>> expression, QueryableProvider<T> queryableProvider)
|
||||
{
|
||||
var body = ExpressionTool.GetLambdaExpressionBody(expression);
|
||||
if (body is NewExpression)
|
||||
{
|
||||
var newExp = ((NewExpression)body);
|
||||
foreach (var item in newExp.Arguments)
|
||||
{
|
||||
if (item is MemberExpression)
|
||||
{
|
||||
var member = (MemberExpression)item;
|
||||
if (member.Type.IsClass())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static bool IsSqlFunc<T, TResult>(Expression<Func<T, TResult>> expression, QueryableProvider<T> queryableProvider)
|
||||
{
|
||||
|
@@ -138,11 +138,15 @@ namespace SqlSugar
|
||||
var memberExpression = ((expression as LambdaExpression).Body as MemberExpression);
|
||||
|
||||
var listItemType = list.Where(it=>it!=null).FirstOrDefault()?.GetType();
|
||||
if (listItemType == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (listItemType.Name.StartsWith("List`"))
|
||||
{
|
||||
listItemType = listItemType.GetGenericArguments()[0];
|
||||
}
|
||||
if (listItemType == null) return;
|
||||
//if (listItemType == null) return;
|
||||
|
||||
var listItemEntity = this.Context.EntityMaintenance.GetEntityInfo(listItemType);
|
||||
var listPkColumn = listItemEntity.Columns.Where(it => it.IsPrimarykey).FirstOrDefault();
|
||||
|
@@ -1990,7 +1990,12 @@ namespace SqlSugar
|
||||
{
|
||||
if (this.QueryBuilder.Includes!=null&&this.QueryBuilder.Includes.Count > 0)
|
||||
{
|
||||
var list = this.ToPageList(pageIndex,pageSize,ref totalNumber).Select(expression.Compile()).ToList();
|
||||
if (pageIndex == 0)
|
||||
pageIndex = 1;
|
||||
var list = this.Clone().Skip(pageIndex-1*pageSize).Take(pageSize).ToList(expression);
|
||||
var countQueryable = this.Clone();
|
||||
countQueryable.QueryBuilder.Includes = null;
|
||||
totalNumber = countQueryable.Count();
|
||||
return list;
|
||||
}
|
||||
else
|
||||
@@ -2272,8 +2277,12 @@ namespace SqlSugar
|
||||
{
|
||||
if (this.QueryBuilder.Includes!=null&&this.QueryBuilder.Includes.Count > 0)
|
||||
{
|
||||
var pList = await this.ToPageListAsync(pageIndex, pageSize, totalNumber);
|
||||
var list = pList.Select(expression.Compile()).ToList();
|
||||
if (pageIndex == 0)
|
||||
pageIndex = 1;
|
||||
var list =await this.Clone().Skip(pageIndex - 1 * pageSize).Take(pageSize).ToListAsync(expression);
|
||||
var countQueryable = this.Clone();
|
||||
countQueryable.QueryBuilder.Includes = null;
|
||||
totalNumber.Value =await countQueryable.CountAsync();
|
||||
return list;
|
||||
}
|
||||
else
|
||||
|
Reference in New Issue
Block a user