This commit is contained in:
sunkaixuan
2017-09-07 17:03:01 +08:00
parent 1f6030d74a
commit 3a12bf55fa
6 changed files with 75 additions and 3 deletions

View File

@@ -21,6 +21,7 @@ namespace OrmTest.UnitTest
base.Begin();
for (int i = 0; i < base.Count; i++)
{
whereSingle25();
whereSingle24();
whereSingle23();
whereSingle22();
@@ -390,6 +391,19 @@ namespace OrmTest.UnitTest
new SugarParameter("@Datetime10",DateTime.Now.Date)
}, "whereSingle24");
}
private void whereSingle25()
{
var p = DateTime.Now;
Expression<Func<DataTestInfo, bool>> exp = it => it.Datetime1.Date > p.Date;
SqlServerExpressionContext expContext = new SqlServerExpressionContext();
expContext.Resolve(exp, ResolveExpressType.WhereSingle);
var value = expContext.Result.GetString();
var pars = expContext.Parameters;
base.Check(value, pars, "( [Datetime1] > @Datetime10 )", new List<SugarParameter>()
{
new SugarParameter("@Datetime10",DateTime.Now.Date)
}, "whereSingle24");
}
}
public class WhereConst

View File

@@ -289,5 +289,10 @@ namespace SqlSugar
else
return string.Format("{0}.*", shortName);
}
public virtual string MergeString(params string[] strings)
{
return string.Join("", strings);
}
}
}

View File

@@ -51,5 +51,6 @@ namespace SqlSugar
string True();
string False();
string GuidNew();
string MergeString(params string[] strings);
}
}

View File

@@ -19,11 +19,12 @@ namespace SqlSugar
var isValue = expression.Member.Name == "Value" && expression.Member.DeclaringType.Name == "Nullable`1";
var isBool = expression.Type == UtilConstants.BoolType;
var isValueBool = isValue && isBool && parameter.BaseExpression == null;
var isLength = expression.Member.Name == "Length" &&childIsMember&&childExpression.Type == UtilConstants.StringType;
var isLength = expression.Member.Name == "Length" && childIsMember && childExpression.Type == UtilConstants.StringType;
var isDateValue = expression.Member.Name.IsIn(Enum.GetNames(typeof(DateType))) && (expression.Expression as MemberExpression).Type == UtilConstants.DateType;
var isLogicOperator = ExpressionTool.IsLogicOperator(baseParameter.OperatorValue) || baseParameter.OperatorValue.IsNullOrEmpty();
var isHasValue = isLogicOperator && expression.Member.Name == "HasValue" && expression.Expression != null && expression.NodeType == ExpressionType.MemberAccess;
var isDateTimeNowDate = expression.Member.Name == "Date" &&childIsMember&&childExpression.Member.Name == "Now";
var isDateTimeNowDate = expression.Member.Name == "Date" && childIsMember && childExpression.Member.Name == "Now";
var isDateDate = expression.Member.Name == "Date" && expression.Expression.Type == UtilConstants.DateType;
if (isLength)
{
var oldCommonTempDate = parameter.CommonTempData;
@@ -85,6 +86,37 @@ namespace SqlSugar
{
expression = expression.Expression as MemberExpression;
}
else if (isDateDate)
{
var name = expression.Member.Name;
var oldCommonTempDate = parameter.CommonTempData;
parameter.CommonTempData = CommonTempDataType.Result;
this.Expression = expression.Expression;
this.Start();
var isConst = parameter.CommonTempData.GetType() == UtilConstants.DateType;
if (isConst)
{
AppendValue(parameter, isLeft, parameter.CommonTempData.ObjToDate().Date);
}
else
{
var GetYear = new MethodCallExpressionModel()
{
Args = new List<MethodCallExpressionArgs>() {
new MethodCallExpressionArgs() { IsMember=true, MemberName=parameter.CommonTempData, MemberValue=parameter.CommonTempData },
new MethodCallExpressionArgs() { MemberName=DateType.Year, MemberValue=DateType.Year}
}
};
AppendMember(parameter, isLeft,this.Context.DbMehtods.MergeString(
this.GetDateValue(parameter.CommonTempData, DateType.Year),
"+'-'+",
this.GetDateValue(parameter.CommonTempData, DateType.Month),
"+'-'+",
this.GetDateValue(parameter.CommonTempData, DateType.Day)));
}
parameter.CommonTempData = oldCommonTempDate;
return;
}
else if (isDateTimeNowDate)
{
AppendValue(parameter, isLeft, DateTime.Now.Date);
@@ -232,5 +264,17 @@ namespace SqlSugar
fieldName = Context.GetTranslationColumnName(fieldName);
return fieldName;
}
private string GetDateValue(object value, DateType type)
{
var pars = new MethodCallExpressionModel()
{
Args = new List<MethodCallExpressionArgs>() {
new MethodCallExpressionArgs() { IsMember=true, MemberName=value, MemberValue=value },
new MethodCallExpressionArgs() { MemberName=type, MemberValue=type}
}
};
return this.Context.DbMehtods.DateValue(pars);
}
}
}

View File

@@ -119,6 +119,9 @@ namespace SqlSugar
var parameter = model.Args[0];
return string.Format(" LENGTH({0})", parameter.MemberName);
}
public override string MergeString(params string[] strings)
{
return " concat("+string.Join(",", strings)+") ";
}
}
}

View File

@@ -191,5 +191,10 @@ namespace SqlSugar
}
return string.Format(" Cast((JulianDay({0}) - JulianDay({1})) *{2} As INTEGER)", parameter, parameter2, time);
}
public override string MergeString(params string[] strings)
{
return string.Join("||", strings) ;
}
}
}