diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubAnd.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubAnd.cs new file mode 100644 index 000000000..30450ceea --- /dev/null +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubAnd.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Text; + +namespace SqlSugar +{ + public class SubAnd:ISubOperation + { + public string Name + { + get { return "And"; } + } + + public Expression Expression + { + get; set; + } + + public int Sort + { + get + { + return 401; + } + } + + public string GetValue(ExpressionContext context, Expression expression) + { + var exp = expression as MethodCallExpression; + var argExp = exp.Arguments[0]; + var result = "AND " + SubTools.GetMethodValue(context, argExp, ResolveExpressType.WhereMultiple); + var selfParameterName = context.GetTranslationColumnName((argExp as LambdaExpression).Parameters.First().Name) + UtilConstants.Dot; + result = result.Replace(selfParameterName, string.Empty); + 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 0fe417d49..6092c96d8 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubWhere.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubWhere.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Linq.Expressions; using System.Text; -namespace SqlSugar.ExpressionsToSql.Subquery +namespace SqlSugar { public class SubWhere: ISubOperation { diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubResolve.cs index 45c39a519..77d89084e 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubResolve.cs @@ -10,7 +10,8 @@ namespace SqlSugar { List allMethods = new List(); private ExpressionContext context = null; - public SubResolve(MethodCallExpression expression, ExpressionContext context,Expression oppsiteExpression) + private bool hasWhere; + public SubResolve(MethodCallExpression expression, ExpressionContext context, Expression oppsiteExpression) { this.context = context; var currentExpression = expression; @@ -20,7 +21,8 @@ namespace SqlSugar var childExpression = (oppsiteExpression as MemberExpression).Expression; this.context.SingleTableNameSubqueryShortName = (childExpression as ParameterExpression).Name; } - else if (context.IsSingle) { + else if (context.IsSingle) + { this.context.SingleTableNameSubqueryShortName = (context.Expression as LambdaExpression).Parameters.First().Name; } while (currentExpression != null) @@ -45,16 +47,25 @@ namespace SqlSugar { var methodName = exp.Method.Name; var item = SubTools.SubItems.First(s => s.Name == methodName); + if (item is SubWhere && hasWhere == false) + { + hasWhere = true; + } + else + { + item = SubTools.SubItems.First(s => s is SubAnd); + } item.Expression = exp; return item; }).ToList(); isubList.Insert(0, new SubBegin()); - if (isubList.Any(it => it is SubAny||it is SubNotAny)) { + if (isubList.Any(it => it is SubAny || it is SubNotAny)) + { isubList.Add(new SubLeftBracket()); isubList.Add(new SubRightBracket()); isubList.Add(new SubSelectDefault()); } - isubList= isubList.OrderBy(it => it.Sort).ToList(); + isubList = isubList.OrderBy(it => it.Sort).ToList(); List result = isubList.Select(it => { return it.GetValue(this.context, it.Expression); diff --git a/Src/Asp.Net/SqlSugar/SqlSugar.csproj b/Src/Asp.Net/SqlSugar/SqlSugar.csproj index 190ef3bf2..e6ef2a60f 100644 --- a/Src/Asp.Net/SqlSugar/SqlSugar.csproj +++ b/Src/Asp.Net/SqlSugar/SqlSugar.csproj @@ -73,6 +73,7 @@ +