diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/UCustom012.cs b/Src/Asp.Net/SqlServerTest/UnitTest/UCustom012.cs index 69f72fedd..0c7d73c80 100644 --- a/Src/Asp.Net/SqlServerTest/UnitTest/UCustom012.cs +++ b/Src/Asp.Net/SqlServerTest/UnitTest/UCustom012.cs @@ -86,9 +86,9 @@ namespace OrmTest db.Insertable(new ABMapping1() { AId=1,BId=1 }).ExecuteCommand(); db.Insertable(new ABMapping1() { AId =2, BId = 1 }).ExecuteCommand(); db.Insertable(new ABMapping1() { AId = 2, BId = 2 }).ExecuteCommand(); - + var p = ""; var list3= db.Queryable() - .Includes(x => x.BList.Where(it=>it.Id==1).ToList()) + .Includes(x => x.BList.WhereIF(!string.IsNullOrEmpty(p),it=>it.Id==11).ToList()) .Where(x=>x.BList.Any()).ToList(); var list31 = db.Queryable().Includes(x => x.BList,x=>x.AList).ToList(); diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs index 6b89e191c..7c0b4ab3b 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs @@ -279,21 +279,30 @@ namespace SqlSugar var exp = method.Arguments[1]; where.Add(" " +queryable.QueryBuilder.GetExpressionValue(exp, ResolveExpressType.WhereSingle).GetString()); } + if (method.Method.Name == "WhereIF") + { + var isOk = LambdaExpression.Lambda(method.Arguments[1]).Compile().DynamicInvoke(); + if (isOk.ObjToBool()) + { + var exp = method.Arguments[2]; + where.Add(" " + queryable.QueryBuilder.GetExpressionValue(exp, ResolveExpressType.WhereSingle).GetString()); + } + } else if (method.Method.Name == "OrderBy") { var exp = method.Arguments[1]; - oredrBy.Add( " "+ queryable.QueryBuilder.GetExpressionValue(exp,ResolveExpressType.WhereSingle).GetString()); + oredrBy.Add(" " + queryable.QueryBuilder.GetExpressionValue(exp, ResolveExpressType.WhereSingle).GetString()); } else if (method.Method.Name == "OrderByDescending") { var exp = method.Arguments[1]; - oredrBy.Add(" " + queryable.QueryBuilder.GetExpressionValue(exp, ResolveExpressType.WhereSingle).GetString()+" DESC"); + oredrBy.Add(" " + queryable.QueryBuilder.GetExpressionValue(exp, ResolveExpressType.WhereSingle).GetString() + " DESC"); } else if (method.Method.Name == "ToList") { isList = true; } - else + else { Check.ExceptionEasy($"no support {item}", $"不支持表达式{item} 不支持方法{method.Method.Name}"); } diff --git a/Src/Asp.Net/SqlSugar/SqlSugar.csproj b/Src/Asp.Net/SqlSugar/SqlSugar.csproj index dac86fb7e..76c71d046 100644 --- a/Src/Asp.Net/SqlSugar/SqlSugar.csproj +++ b/Src/Asp.Net/SqlSugar/SqlSugar.csproj @@ -254,6 +254,7 @@ + diff --git a/Src/Asp.Net/SqlSugar/Utilities/CommonExtensions.cs b/Src/Asp.Net/SqlSugar/Utilities/CommonExtensions.cs new file mode 100644 index 000000000..086658cc6 --- /dev/null +++ b/Src/Asp.Net/SqlSugar/Utilities/CommonExtensions.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Text; +using System.Threading.Tasks; + +namespace SqlSugar +{ + public static class CommonExtensions + { + public static IEnumerable WhereIF(this IEnumerable thisValue, bool isOk, Func predicate) + { + if (isOk) + { + return thisValue.Where(predicate); + } + else + { + return thisValue; + } + } + } +}