| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Linq.Expressions;
- using System.Text;
- namespace SqlSugar
- {
- public class SubAndIF : ISubOperation
- {
- public bool HasWhere
- {
- get; set;
- }
- public string Name
- {
- get { return "WhereIF"; }
- }
- public Expression Expression
- {
- get; set;
- }
- public int Sort
- {
- get
- {
- return 400;
- }
- }
- public ExpressionContext Context
- {
- get; set;
- }
- public string GetValue(Expression expression)
- {
- var exp = expression as MethodCallExpression;
- object value = null;
- try
- {
- value = ExpressionTool.DynamicInvoke(exp.Arguments[0]);
- }
- catch
- {
- Check.Exception(true, ErrorMessage.WhereIFCheck,exp.Arguments[0].ToString());
- }
- var isWhere= Convert.ToBoolean(value);
- if (!Convert.ToBoolean(isWhere)) {
- return "";
- }
- var argExp = exp.Arguments[1];
- var copyContext = this.Context;
- if (this.Context.JoinIndex > 0)
- {
- copyContext = this.Context.GetCopyContextWithMapping();
- copyContext.IsSingle = false;
- }
- var result = "AND " + SubTools.GetMethodValue(copyContext, argExp, ResolveExpressType.WhereMultiple); ;
- if (this.Context.JoinIndex > 0)
- {
- this.Context.Parameters.AddRange(copyContext.Parameters);
- this.Context.Index = copyContext.Index;
- this.Context.ParameterIndex = copyContext.ParameterIndex;
- }
- var selfParameterName = Context.GetTranslationColumnName((argExp as LambdaExpression).Parameters.First().Name) + UtilConstants.Dot;
- if (this.Context.JoinIndex==0)
- {
- result = result.Replace(selfParameterName, SubTools.GetSubReplace(this.Context));
- }
- return result;
- }
- }
- }
|