23
This commit is contained in:
28
FrameWork/SqlSugar/ExpressionsToSql/CaseWhen/CaseWhen.cs
Normal file
28
FrameWork/SqlSugar/ExpressionsToSql/CaseWhen/CaseWhen.cs
Normal file
@@ -0,0 +1,28 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Text;
|
||||
|
||||
namespace SqlSugar
|
||||
{
|
||||
public class CaseWhen
|
||||
{
|
||||
public CaseThen ElseIF(bool condition)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
public T End<T>(T defaultValue)
|
||||
{
|
||||
return default(T);
|
||||
}
|
||||
}
|
||||
public class CaseThen
|
||||
{
|
||||
|
||||
public CaseWhen Return<T>(T result)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Text;
|
||||
|
||||
namespace SqlSugar
|
||||
{
|
||||
|
||||
public class CaseWhenResolve
|
||||
{
|
||||
List<MethodCallExpression> allMethods = new List<MethodCallExpression>();
|
||||
private ExpressionContext context = null;
|
||||
public CaseWhenResolve(MethodCallExpression expression, ExpressionContext context, Expression oppsiteExpression)
|
||||
{
|
||||
this.context = context;
|
||||
var currentExpression = expression;
|
||||
allMethods.Add(currentExpression);
|
||||
if (context.IsSingle && oppsiteExpression != null&& oppsiteExpression is MemberExpression)
|
||||
{
|
||||
var childExpression = (oppsiteExpression as MemberExpression).Expression;
|
||||
this.context.SingleTableNameSubqueryShortName = (childExpression as ParameterExpression).Name;
|
||||
}
|
||||
else if (context.IsSingle)
|
||||
{
|
||||
this.context.SingleTableNameSubqueryShortName = (context.Expression as LambdaExpression).Parameters.First().Name;
|
||||
}
|
||||
while (currentExpression != null)
|
||||
{
|
||||
var addItem = currentExpression.Object as MethodCallExpression;
|
||||
if (addItem != null)
|
||||
allMethods.Add(addItem);
|
||||
currentExpression = addItem;
|
||||
}
|
||||
}
|
||||
|
||||
public string GetSql()
|
||||
{
|
||||
allMethods.Reverse();
|
||||
List<KeyValuePair<string, string>> sqls = new List<KeyValuePair<string, string>>();
|
||||
foreach (var methodExp in allMethods)
|
||||
{
|
||||
var isFirst = allMethods.First() == methodExp;
|
||||
var isLast= allMethods.Last() == methodExp;
|
||||
var sql= SubTools.GetMethodValue(this.context, methodExp.Arguments[0],this.context.IsSingle?ResolveExpressType.WhereSingle:ResolveExpressType.WhereMultiple);
|
||||
sqls.Add(new KeyValuePair<string, string>(methodExp.Method.Name, sql));
|
||||
}
|
||||
var result= this.context.DbMehtods.CaseWhen(sqls);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user