This commit is contained in:
sunkaixuan 2017-09-17 00:37:12 +08:00
parent 18adc06243
commit e7ddef1bee
4 changed files with 56 additions and 5 deletions

View File

@ -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;
}
}
}

View File

@ -4,7 +4,7 @@ using System.Linq;
using System.Linq.Expressions;
using System.Text;
namespace SqlSugar.ExpressionsToSql.Subquery
namespace SqlSugar
{
public class SubWhere: ISubOperation
{

View File

@ -10,7 +10,8 @@ namespace SqlSugar
{
List<MethodCallExpression> allMethods = new List<MethodCallExpression>();
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<string> result = isubList.Select(it =>
{
return it.GetValue(this.context, it.Expression);

View File

@ -73,6 +73,7 @@
<Compile Include="Abstract\DeleteProvider\DeleteableProvider.cs" />
<Compile Include="Enum\DbType.cs" />
<Compile Include="ExpressionsToSql\Subquery\Items\ISubAction.cs" />
<Compile Include="ExpressionsToSql\Subquery\Items\SubAnd.cs" />
<Compile Include="ExpressionsToSql\Subquery\Items\SubLeftBracket.cs" />
<Compile Include="ExpressionsToSql\Subquery\Items\SubFromTable.cs" />
<Compile Include="ExpressionsToSql\Subquery\Items\SubAny.cs" />