diff --git a/Src/Asp.Net/SqlServerTest/Demo/Demo1_Queryable.cs b/Src/Asp.Net/SqlServerTest/Demo/Demo1_Queryable.cs index 020c0a809..ccabe261f 100644 --- a/Src/Asp.Net/SqlServerTest/Demo/Demo1_Queryable.cs +++ b/Src/Asp.Net/SqlServerTest/Demo/Demo1_Queryable.cs @@ -17,6 +17,22 @@ namespace OrmTest NoEntity(); Mapper(); SqlFuncTest(); + Subquery(); + } + + private static void Subquery() + { + Console.WriteLine(""); + Console.WriteLine("#### Subquery Start ####"); + var db = GetInstance(); + + var list = db.Queryable().Take(10).Select(it => new + { + customName=SqlFunc.Subqueryable().Where("it.CustomId=id").Select(s=>s.Name), + customName2 = SqlFunc.Subqueryable().Where("it.CustomId = id").Where(s => true).Select(s => s.Name) + }).ToList(); + + Console.WriteLine("#### Subquery End ####"); } private static void SqlFuncTest() @@ -26,7 +42,7 @@ namespace OrmTest var db = GetInstance(); var index= db.Queryable().Select(it => SqlFunc.CharIndex("a", "cccacc")).First(); - Console.WriteLine("#### End Start ####"); + Console.WriteLine("#### SqlFunc End ####"); } private static void Mapper() diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubAnd.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubAnd.cs index 8709f47d6..07da2a3f6 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubAnd.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubAnd.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; +using System.Text.RegularExpressions; namespace SqlSugar { @@ -41,6 +42,15 @@ namespace SqlSugar var exp = expression as MethodCallExpression; var argExp = exp.Arguments[0]; var result = "AND " + SubTools.GetMethodValue(this.Context, argExp, ResolveExpressType.WhereMultiple); + + + var regex = @"^AND (\@Const\d+) $"; + if (Regex.IsMatch(result, regex)) + { + result = "AND " + this.Context.Parameters.First(it => it.ParameterName == Regex.Match(result, regex).Groups[1].Value).Value; + return result; + } + var selfParameterName = this.Context.GetTranslationColumnName((argExp as LambdaExpression).Parameters.First().Name) + UtilConstants.Dot; result = result.Replace(selfParameterName, SubTools.GetSubReplace(this.Context)); return result; diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubWhere.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubWhere.cs index cb02caf2a..3e287c40b 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubWhere.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubWhere.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; +using System.Text.RegularExpressions; namespace SqlSugar { @@ -40,7 +41,16 @@ namespace SqlSugar { var exp = expression as MethodCallExpression; var argExp= exp.Arguments[0]; - var result= "WHERE "+SubTools.GetMethodValue(Context, argExp, ResolveExpressType.WhereMultiple);; + var result= "WHERE "+SubTools.GetMethodValue(Context, argExp, ResolveExpressType.WhereMultiple); + + + var regex = @"^WHERE (\@Const\d+) $"; + if (Regex.IsMatch(result, regex)) + { + result = "WHERE " + this.Context.Parameters.First(it => it.ParameterName == Regex.Match(result, regex).Groups[1].Value).Value; + return result; + } + var selfParameterName = Context.GetTranslationColumnName((argExp as LambdaExpression).Parameters.First().Name)+UtilConstants.Dot; result = result.Replace(selfParameterName,SubTools.GetSubReplace(this.Context)); return result; diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Subquerable.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Subquerable.cs index dd727e3e6..3d6f77278 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Subquerable.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Subquerable.cs @@ -9,6 +9,10 @@ namespace SqlSugar public class Subqueryable where T : class, new() { + public Subqueryable Where(string where) + { + return this; + } public Subqueryable Where(Func expression) { return this;