diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs index 3258004e7..cacbc1924 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs @@ -71,27 +71,66 @@ 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(); } + else if (i == 4) + { + var currentList = _preList.Where(it => it != null).ToList(); + if (RootList == null || currentList.Count == 0) return; + List list = ExecuteByLay(currentList); + ExecuteByLay(item, list, SelectR4); + _preList = list.ToList(); + } + else if (i == 5) + { + var currentList = _preList.Where(it => it != null).ToList(); + if (RootList == null || currentList.Count == 0) return; + List list = ExecuteByLay(currentList); + ExecuteByLay(item, list, SelectR5); + _preList = list.ToList(); + } + else if (i == 6) + { + var currentList = _preList.Where(it => it != null).ToList(); + if (RootList == null || currentList.Count == 0) return; + List list = ExecuteByLay(currentList); + ExecuteByLay(item, list, SelectR6); + _preList = list.ToList(); + } + else if (i == 7) + { + var currentList = _preList.Where(it => it != null).ToList(); + if (RootList == null || currentList.Count == 0) return; + List list = ExecuteByLay(currentList); + ExecuteByLay(item, list, SelectR7); + _preList = list.ToList(); + } _preExpressionList.Add(item); _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; diff --git a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/Subquery/SubqueryableN.cs b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/Subquery/SubqueryableN.cs index eeaad3ee8..138fbc6d8 100644 --- a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/Subquery/SubqueryableN.cs +++ b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/Subquery/SubqueryableN.cs @@ -228,6 +228,18 @@ namespace SqlSugar { return this; } + public Subqueryable WhereIF(bool isWhere, Func expression) + { + return this; + } + public TResult Select(Func expression) where TResult : struct + { + return default(TResult); + } + public string Select(Func expression) + { + return default(string); + } } public class Subqueryable : Subqueryable where T1 : class, new() { @@ -251,6 +263,18 @@ namespace SqlSugar { return this; } + public Subqueryable WhereIF(bool isWhere, Func expression) + { + return this; + } + public TResult Select(Func expression) where TResult : struct + { + return default(TResult); + } + public string Select(Func expression) + { + return default(string); + } } public class Subqueryable : Subqueryable where T1 : class, new() { @@ -270,5 +294,17 @@ namespace SqlSugar { return this; } + public Subqueryable WhereIF(bool isWhere, Func expression) + { + return this; + } + public TResult Select(Func expression) where TResult : struct + { + return default(TResult); + } + public string Select(Func expression) + { + return default(string); + } } }