db.Queryable.Includes.Select.ToList

This commit is contained in:
sunkaixuan 2023-05-04 08:44:11 +08:00
parent aa88be7e93
commit 7c5bdeeb9d

View File

@ -572,10 +572,12 @@ namespace SqlSugar
var navInfo = this.QueryBuilder.AppendNavInfo; var navInfo = this.QueryBuilder.AppendNavInfo;
var entityColumns = this.EntityInfo.Columns; var entityColumns = this.EntityInfo.Columns;
var pkColumns = entityColumns.Where(it => it.IsPrimarykey); var pkColumns = entityColumns.Where(it => it.IsPrimarykey);
foreach (var item in pkColumns) AddAppendProperties(navManages, navInfo, entityColumns, pkColumns);
{ AddMappingNavProperties(dic, navInfo, entityColumns);
navInfo.AppendProperties.Add(item.PropertyName,item.DbColumnName);
} }
private static void AddMappingNavProperties(Dictionary<string, Expression> dic, AppendNavInfo navInfo, List<EntityColumnInfo> entityColumns)
{
foreach (var item in dic) foreach (var item in dic)
{ {
var value = item.Value; var value = item.Value;
@ -595,6 +597,14 @@ namespace SqlSugar
} }
} }
}
private static void AddAppendProperties(IEnumerable<NavigatManager<T>> navManages, AppendNavInfo navInfo, List<EntityColumnInfo> entityColumns, IEnumerable<EntityColumnInfo> pkColumns)
{
foreach (var item in pkColumns)
{
navInfo.AppendProperties.Add(item.PropertyName, item.DbColumnName);
}
foreach (var item in navManages) foreach (var item in navManages)
{ {
var navName = ExpressionTool.GetMemberName(item.Expressions.First()); var navName = ExpressionTool.GetMemberName(item.Expressions.First());
@ -631,7 +641,23 @@ namespace SqlSugar
if (this.QueryBuilder.Includes != null) if (this.QueryBuilder.Includes != null)
{ {
var managers = (this.QueryBuilder.Includes as List<object>); var managers = (this.QueryBuilder.Includes as List<object>);
if (this.QueryBuilder.SelectValue.HasValue() && this.QueryBuilder.NoCheckInclude == false) if (IsSelectNavQuery())
{
SelectNavQuery(result, managers);
}
else
{
foreach (var it in managers)
{
var manager = it as NavigatManager<TResult>;
manager.RootList = result;
manager.Execute();
}
}
}
}
private void SelectNavQuery<TResult>(List<TResult> result, List<object> managers)
{ {
foreach (var it in managers) foreach (var it in managers)
{ {
@ -649,7 +675,6 @@ namespace SqlSugar
var appendResult = this.QueryBuilder.AppendNavInfo.Result[index]; var appendResult = this.QueryBuilder.AppendNavInfo.Result[index];
foreach (var kv in appendResult.result) foreach (var kv in appendResult.result)
{ {
var propertyName = kv.Key.Replace("SugarNav_", ""); var propertyName = kv.Key.Replace("SugarNav_", "");
var propertyInfo = columns.First(i => i.PropertyName == propertyName).PropertyInfo; var propertyInfo = columns.First(i => i.PropertyName == propertyName).PropertyInfo;
propertyInfo.SetValue(addItem, kv.Value); propertyInfo.SetValue(addItem, kv.Value);
@ -660,17 +685,12 @@ namespace SqlSugar
it.GetType().GetMethod("Execute").Invoke(it, null); it.GetType().GetMethod("Execute").Invoke(it, null);
} }
} }
else
private bool IsSelectNavQuery()
{ {
foreach (var it in managers) return this.QueryBuilder.SelectValue.HasValue() && this.QueryBuilder.NoCheckInclude == false;
{
var manager = it as NavigatManager<TResult>;
manager.RootList = result;
manager.Execute();
}
}
}
} }
protected void _Mapper<TResult>(List<TResult> result) protected void _Mapper<TResult>(List<TResult> result)
{ {
if (this.EntityInfo.Columns.Any(it => it.IsTranscoding)) if (this.EntityInfo.Columns.Any(it => it.IsTranscoding))