diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs index 3258004e7..706389423 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs @@ -71,20 +71,7 @@ namespace SqlSugar { var currentList = _preList.Where(it => it != null).ToList(); if (RootList == null || currentList.Count == 0) return; - var memberExpression = ((_preExpressionList.Last() as LambdaExpression).Body as MemberExpression); - var navObjectName = memberExpression.Member.Name; - var navType = currentList[0].GetType().GetProperty(navObjectName).PropertyType.Name; - var isList = navType.StartsWith("List`"); - List list = new List(); - if (isList) - { - list = currentList.SelectMany(it => (it.GetType().GetProperty(navObjectName).GetValue(it) as IList).Cast()).ToList(); - - } - else - { - list = currentList.Select(it => (it.GetType().GetProperty(navObjectName).GetValue(it))).ToList(); - } + List list = ExecuteByLay(currentList); ExecuteByLay(item, list, SelectR3); _preList = list.ToList(); } @@ -92,6 +79,26 @@ namespace SqlSugar _ListCallFunc = new List(); } + private List ExecuteByLay(List currentList) + { + var memberExpression = ((_preExpressionList.Last() as LambdaExpression).Body as MemberExpression); + var navObjectName = memberExpression.Member.Name; + var navType = currentList[0].GetType().GetProperty(navObjectName).PropertyType.Name; + var isList = navType.StartsWith("List`"); + List list = new List(); + if (isList) + { + list = currentList.SelectMany(it => (it.GetType().GetProperty(navObjectName).GetValue(it) as IList).Cast()).ToList(); + + } + else + { + list = currentList.Select(it => (it.GetType().GetProperty(navObjectName).GetValue(it))).ToList(); + } + + return list; + } + private void ExecuteByLay(Expression expression, List list, Func, List> selector) { if (list == null || list.Count == 0) return;