mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-09-18 17:48:11 +08:00
-
This commit is contained in:
@@ -47,6 +47,13 @@ namespace OrmTest.UnitTest
|
|||||||
|
|
||||||
|
|
||||||
#region sql and parameters validate
|
#region sql and parameters validate
|
||||||
|
var ss0 = db.Queryable<Student, School>((st,sc)=>new object[] {
|
||||||
|
JoinType.Inner,st.Id==sc.Id
|
||||||
|
}).GroupBy(st => st.Id).Select(st => new { avgId=NBORM.AggregateAvg(st.Id) }).ToSql();
|
||||||
|
base.Check(" SELECT AVG([st].[Id]) AS [avgId] FROM [Student] st Inner JOIN School sc ON ( [st].[Id] = [sc].[Id] ) GROUP BY [st].[Id] ", null,
|
||||||
|
ss0.Key, null," ss0 Error");
|
||||||
|
|
||||||
|
|
||||||
var ss1 = db.Queryable<School, School>((st, st2) => new object[] {
|
var ss1 = db.Queryable<School, School>((st, st2) => new object[] {
|
||||||
JoinType.Left,st.Id==st2.Id
|
JoinType.Left,st.Id==st2.Id
|
||||||
})
|
})
|
||||||
@@ -56,7 +63,7 @@ namespace OrmTest.UnitTest
|
|||||||
base.Check("SELECT [st].[Id] AS [stid] , [st2].[Id] AS [scId] , [st].[Id] AS [School.Id] , [st].[Name] AS [School.Name] FROM [School] st Left JOIN School st2 ON ( [st].[Id] = [st2].[Id] ) WHERE ( [st].[Id] > @Id0 ) "
|
base.Check("SELECT [st].[Id] AS [stid] , [st2].[Id] AS [scId] , [st].[Id] AS [School.Id] , [st].[Name] AS [School.Name] FROM [School] st Left JOIN School st2 ON ( [st].[Id] = [st2].[Id] ) WHERE ( [st].[Id] > @Id0 ) "
|
||||||
, new List<SugarParameter>() {
|
, new List<SugarParameter>() {
|
||||||
new SugarParameter("@Id0",0)
|
new SugarParameter("@Id0",0)
|
||||||
}, ss1.Key, ss1.Value, "ss1错误");
|
}, ss1.Key, ss1.Value, "ss1 Error");
|
||||||
|
|
||||||
|
|
||||||
var ss2 = db.Queryable<Student, School, School>((st, sc, sc2) => new object[] {
|
var ss2 = db.Queryable<Student, School, School>((st, sc, sc2) => new object[] {
|
||||||
@@ -67,7 +74,7 @@ namespace OrmTest.UnitTest
|
|||||||
base.Check("SELECT [st].[Id] AS [Id] FROM [Student] st Left JOIN School sc ON ( [st].[SchoolId] = [sc].[Id] ) Left JOIN School sc2 ON ( [sc2].[Id] = [sc].[Id] ) WHERE ( [st].[Id] > @Id0 ) ",
|
base.Check("SELECT [st].[Id] AS [Id] FROM [Student] st Left JOIN School sc ON ( [st].[SchoolId] = [sc].[Id] ) Left JOIN School sc2 ON ( [sc2].[Id] = [sc].[Id] ) WHERE ( [st].[Id] > @Id0 ) ",
|
||||||
new List<SugarParameter>() {
|
new List<SugarParameter>() {
|
||||||
new SugarParameter("@Id0",0)
|
new SugarParameter("@Id0",0)
|
||||||
}, ss2.Key, ss2.Value, "ss2错误");
|
}, ss2.Key, ss2.Value, "ss2 Error");
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
@@ -186,5 +186,35 @@ namespace SqlSugar
|
|||||||
var parameter3 = model.Args[2];
|
var parameter3 = model.Args[2];
|
||||||
return string.Format("REPLACE({0},{1},{2})", parameter.MemberName, parameter2.MemberName, parameter3.MemberName);
|
return string.Format("REPLACE({0},{1},{2})", parameter.MemberName, parameter2.MemberName, parameter3.MemberName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string AggregateSum(MethodCallExpressionModel model)
|
||||||
|
{
|
||||||
|
var parameter = model.Args[0];
|
||||||
|
return string.Format("SUM({0})", parameter.MemberName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string AggregateAvg(MethodCallExpressionModel model)
|
||||||
|
{
|
||||||
|
var parameter = model.Args[0];
|
||||||
|
return string.Format("AVG({0})", parameter.MemberName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string AggregateMin(MethodCallExpressionModel model)
|
||||||
|
{
|
||||||
|
var parameter = model.Args[0];
|
||||||
|
return string.Format("MIN({0})", parameter.MemberName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string AggregateMax(MethodCallExpressionModel model)
|
||||||
|
{
|
||||||
|
var parameter = model.Args[0];
|
||||||
|
return string.Format("MAX({0})", parameter.MemberName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string AggregateCount(MethodCallExpressionModel model)
|
||||||
|
{
|
||||||
|
var parameter = model.Args[0];
|
||||||
|
return string.Format("COUNT({0})", parameter.MemberName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -37,5 +37,10 @@ namespace SqlSugar
|
|||||||
string ToDecimal(MethodCallExpressionModel model);
|
string ToDecimal(MethodCallExpressionModel model);
|
||||||
string Length(MethodCallExpressionModel model);
|
string Length(MethodCallExpressionModel model);
|
||||||
string Replace(MethodCallExpressionModel model);
|
string Replace(MethodCallExpressionModel model);
|
||||||
|
string AggregateSum(MethodCallExpressionModel model);
|
||||||
|
string AggregateAvg(MethodCallExpressionModel model);
|
||||||
|
string AggregateMin(MethodCallExpressionModel model);
|
||||||
|
string AggregateMax(MethodCallExpressionModel model);
|
||||||
|
string AggregateCount(MethodCallExpressionModel model);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -34,5 +34,10 @@ namespace SqlSugar
|
|||||||
public static string Substring(object value, int index, int length) { throw new NotImplementedException(); }
|
public static string Substring(object value, int index, int length) { throw new NotImplementedException(); }
|
||||||
public static string Replace(object value,string oldChar, string newChar) { throw new NotImplementedException(); }
|
public static string Replace(object value,string oldChar, string newChar) { throw new NotImplementedException(); }
|
||||||
public static int Length(object value) { throw new NotImplementedException(); }
|
public static int Length(object value) { throw new NotImplementedException(); }
|
||||||
|
public static dynamic AggregateSum(object thisValue) { throw new NotImplementedException(); }
|
||||||
|
public static TResult AggregateAvg<TResult>(TResult thisValue) { throw new NotImplementedException(); }
|
||||||
|
public static dynamic AggregateMin(object thisValue) { throw new NotImplementedException(); }
|
||||||
|
public static dynamic AggregateMax(object thisValue) { throw new NotImplementedException(); }
|
||||||
|
public static dynamic AggregateCount(object thisValue) { throw new NotImplementedException(); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -20,11 +20,25 @@ namespace SqlSugar
|
|||||||
{
|
{
|
||||||
case ResolveExpressType.SelectSingle:
|
case ResolveExpressType.SelectSingle:
|
||||||
fieldName = getSingleName(parameter, expression, isLeft);
|
fieldName = getSingleName(parameter, expression, isLeft);
|
||||||
base.Context.Result.Append(fieldName);
|
if (isSetTempData)
|
||||||
|
{
|
||||||
|
baseParameter.CommonTempData = fieldName;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
base.Context.Result.Append(fieldName);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case ResolveExpressType.SelectMultiple:
|
case ResolveExpressType.SelectMultiple:
|
||||||
fieldName = getMultipleName(parameter, expression, isLeft);
|
fieldName = getMultipleName(parameter, expression, isLeft);
|
||||||
base.Context.Result.Append(fieldName);
|
if (isSetTempData)
|
||||||
|
{
|
||||||
|
baseParameter.CommonTempData = fieldName;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
base.Context.Result.Append(fieldName);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case ResolveExpressType.WhereSingle:
|
case ResolveExpressType.WhereSingle:
|
||||||
if (isSetTempData)
|
if (isSetTempData)
|
||||||
|
@@ -22,48 +22,85 @@ namespace SqlSugar
|
|||||||
{
|
{
|
||||||
case ResolveExpressType.WhereSingle:
|
case ResolveExpressType.WhereSingle:
|
||||||
case ResolveExpressType.WhereMultiple:
|
case ResolveExpressType.WhereMultiple:
|
||||||
foreach (var item in args)
|
WhereMethod(parameter, isLeft, name, args, model);
|
||||||
{
|
|
||||||
parameter.CommonTempData = CommonTempDataType.ChildNodeSet;
|
|
||||||
base.Expression = item;
|
|
||||||
base.Start();
|
|
||||||
var methodCallExpressionArgs = new MethodCallExpressionArgs()
|
|
||||||
{
|
|
||||||
IsMember = parameter.ChildExpression is MemberExpression,
|
|
||||||
MemberName = parameter.CommonTempData
|
|
||||||
};
|
|
||||||
var value = methodCallExpressionArgs.MemberName;
|
|
||||||
if (methodCallExpressionArgs.IsMember)
|
|
||||||
{
|
|
||||||
var childExpression = parameter.ChildExpression as MemberExpression;
|
|
||||||
if (childExpression.Expression != null && childExpression.Expression is ConstantExpression)
|
|
||||||
{
|
|
||||||
methodCallExpressionArgs.IsMember = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (methodCallExpressionArgs.IsMember == false)
|
|
||||||
{
|
|
||||||
var parameterName = this.Context.SqlParameterKeyWord + ExpressionConst.METHODCONST + this.Context.ParameterIndex;
|
|
||||||
this.Context.ParameterIndex++;
|
|
||||||
methodCallExpressionArgs.MemberName = parameterName;
|
|
||||||
methodCallExpressionArgs.MemberValue = value;
|
|
||||||
this.Context.Parameters.Add(new SugarParameter(parameterName, value));
|
|
||||||
}
|
|
||||||
model.Args.Add(methodCallExpressionArgs);
|
|
||||||
}
|
|
||||||
var methodValue = GetMdthodValue(name, model);
|
|
||||||
base.AppendValue(parameter,isLeft, methodValue);
|
|
||||||
break;
|
break;
|
||||||
case ResolveExpressType.SelectSingle:
|
case ResolveExpressType.SelectSingle:
|
||||||
case ResolveExpressType.SelectMultiple:
|
case ResolveExpressType.SelectMultiple:
|
||||||
|
SelectMethod(parameter, isLeft, name, args, model);
|
||||||
|
break;
|
||||||
case ResolveExpressType.FieldSingle:
|
case ResolveExpressType.FieldSingle:
|
||||||
case ResolveExpressType.FieldMultiple:
|
case ResolveExpressType.FieldMultiple:
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private void SelectMethod(ExpressionParameter parameter, bool? isLeft, string name, System.Collections.ObjectModel.ReadOnlyCollection<Expression> args, MethodCallExpressionModel model)
|
||||||
|
{
|
||||||
|
foreach (var item in args)
|
||||||
|
{
|
||||||
|
parameter.CommonTempData = CommonTempDataType.ChildNodeSet;
|
||||||
|
base.Expression = item;
|
||||||
|
base.Start();
|
||||||
|
var methodCallExpressionArgs = new MethodCallExpressionArgs()
|
||||||
|
{
|
||||||
|
IsMember = parameter.ChildExpression is MemberExpression,
|
||||||
|
MemberName = parameter.CommonTempData
|
||||||
|
};
|
||||||
|
var value = methodCallExpressionArgs.MemberName;
|
||||||
|
if (methodCallExpressionArgs.IsMember)
|
||||||
|
{
|
||||||
|
var childExpression = parameter.ChildExpression as MemberExpression;
|
||||||
|
if (childExpression.Expression != null && childExpression.Expression is ConstantExpression)
|
||||||
|
{
|
||||||
|
methodCallExpressionArgs.IsMember = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (methodCallExpressionArgs.IsMember == false)
|
||||||
|
{
|
||||||
|
var parameterName = this.Context.SqlParameterKeyWord + ExpressionConst.METHODCONST + this.Context.ParameterIndex;
|
||||||
|
this.Context.ParameterIndex++;
|
||||||
|
methodCallExpressionArgs.MemberName = parameterName;
|
||||||
|
methodCallExpressionArgs.MemberValue = value;
|
||||||
|
this.Context.Parameters.Add(new SugarParameter(parameterName, value));
|
||||||
|
}
|
||||||
|
model.Args.Add(methodCallExpressionArgs);
|
||||||
|
}
|
||||||
|
parameter.BaseParameter.CommonTempData = GetMdthodValue(name, model);
|
||||||
|
}
|
||||||
|
private void WhereMethod(ExpressionParameter parameter, bool? isLeft, string name, System.Collections.ObjectModel.ReadOnlyCollection<Expression> args, MethodCallExpressionModel model)
|
||||||
|
{
|
||||||
|
foreach (var item in args)
|
||||||
|
{
|
||||||
|
parameter.CommonTempData = CommonTempDataType.ChildNodeSet;
|
||||||
|
base.Expression = item;
|
||||||
|
base.Start();
|
||||||
|
var methodCallExpressionArgs = new MethodCallExpressionArgs()
|
||||||
|
{
|
||||||
|
IsMember = parameter.ChildExpression is MemberExpression,
|
||||||
|
MemberName = parameter.CommonTempData
|
||||||
|
};
|
||||||
|
var value = methodCallExpressionArgs.MemberName;
|
||||||
|
if (methodCallExpressionArgs.IsMember)
|
||||||
|
{
|
||||||
|
var childExpression = parameter.ChildExpression as MemberExpression;
|
||||||
|
if (childExpression.Expression != null && childExpression.Expression is ConstantExpression)
|
||||||
|
{
|
||||||
|
methodCallExpressionArgs.IsMember = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (methodCallExpressionArgs.IsMember == false)
|
||||||
|
{
|
||||||
|
var parameterName = this.Context.SqlParameterKeyWord + ExpressionConst.METHODCONST + this.Context.ParameterIndex;
|
||||||
|
this.Context.ParameterIndex++;
|
||||||
|
methodCallExpressionArgs.MemberName = parameterName;
|
||||||
|
methodCallExpressionArgs.MemberValue = value;
|
||||||
|
this.Context.Parameters.Add(new SugarParameter(parameterName, value));
|
||||||
|
}
|
||||||
|
model.Args.Add(methodCallExpressionArgs);
|
||||||
|
}
|
||||||
|
var methodValue = GetMdthodValue(name, model);
|
||||||
|
base.AppendValue(parameter, isLeft, methodValue);
|
||||||
|
}
|
||||||
|
|
||||||
private object GetMdthodValue(string name, MethodCallExpressionModel model)
|
private object GetMdthodValue(string name, MethodCallExpressionModel model)
|
||||||
{
|
{
|
||||||
@@ -123,6 +160,16 @@ namespace SqlSugar
|
|||||||
return this.Context.DbMehtods.Replace(model);
|
return this.Context.DbMehtods.Replace(model);
|
||||||
case "Length":
|
case "Length":
|
||||||
return this.Context.DbMehtods.Length(model);
|
return this.Context.DbMehtods.Length(model);
|
||||||
|
case "AggregateSum":
|
||||||
|
return this.Context.DbMehtods.AggregateSum(model);
|
||||||
|
case "AggregateAvg":
|
||||||
|
return this.Context.DbMehtods.AggregateAvg(model);
|
||||||
|
case "AggregateMin":
|
||||||
|
return this.Context.DbMehtods.AggregateMin(model);
|
||||||
|
case "AggregateMax":
|
||||||
|
return this.Context.DbMehtods.AggregateMax(model);
|
||||||
|
case "AggregateCount":
|
||||||
|
return this.Context.DbMehtods.AggregateCount(model);
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -51,6 +51,11 @@ namespace SqlSugar
|
|||||||
parameter.Context.Result.Append(base.Context.GetAsString(memberName, parameterName));
|
parameter.Context.Result.Append(base.Context.GetAsString(memberName, parameterName));
|
||||||
this.Context.Parameters.Add(new SugarParameter(parameterName, parameter.CommonTempData));
|
this.Context.Parameters.Add(new SugarParameter(parameterName, parameter.CommonTempData));
|
||||||
}
|
}
|
||||||
|
else if (item is MethodCallExpression) {
|
||||||
|
base.Expression = item;
|
||||||
|
base.Start();
|
||||||
|
parameter.Context.Result.Append(base.Context.GetAsString(memberName, parameter.CommonTempData.ObjToString()));
|
||||||
|
}
|
||||||
else if (item is MemberExpression)
|
else if (item is MemberExpression)
|
||||||
{
|
{
|
||||||
if (base.Context.Result.IsLockCurrentParameter == false)
|
if (base.Context.Result.IsLockCurrentParameter == false)
|
||||||
@@ -90,9 +95,10 @@ namespace SqlSugar
|
|||||||
var listProperties = item.Type.GetProperties().Cast<PropertyInfo>().ToList();
|
var listProperties = item.Type.GetProperties().Cast<PropertyInfo>().ToList();
|
||||||
foreach (var property in listProperties)
|
foreach (var property in listProperties)
|
||||||
{
|
{
|
||||||
if (this.Context.IgnoreComumnList != null
|
if (this.Context.IgnoreComumnList != null
|
||||||
&& this.Context.IgnoreComumnList.Any(
|
&& this.Context.IgnoreComumnList.Any(
|
||||||
it => it.EntityName == item.Type.Name&&it.EntityPropertyName==property.Name)) {
|
it => it.EntityName == item.Type.Name && it.EntityPropertyName == property.Name))
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (property.PropertyType.IsClass())
|
if (property.PropertyType.IsClass())
|
||||||
@@ -101,7 +107,7 @@ namespace SqlSugar
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var asName = "["+item.Type.Name + "." + property.Name+"]";
|
var asName = "[" + item.Type.Name + "." + property.Name + "]";
|
||||||
var columnName = property.Name;
|
var columnName = property.Name;
|
||||||
if (Context.IsJoin)
|
if (Context.IsJoin)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user