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
|
||||
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[] {
|
||||
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 ) "
|
||||
, new List<SugarParameter>() {
|
||||
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[] {
|
||||
@@ -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 ) ",
|
||||
new List<SugarParameter>() {
|
||||
new SugarParameter("@Id0",0)
|
||||
}, ss2.Key, ss2.Value, "ss2错误");
|
||||
}, ss2.Key, ss2.Value, "ss2 Error");
|
||||
#endregion
|
||||
|
||||
|
||||
|
@@ -186,5 +186,35 @@ namespace SqlSugar
|
||||
var parameter3 = model.Args[2];
|
||||
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 Length(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 Replace(object value,string oldChar, string newChar) { 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:
|
||||
fieldName = getSingleName(parameter, expression, isLeft);
|
||||
base.Context.Result.Append(fieldName);
|
||||
if (isSetTempData)
|
||||
{
|
||||
baseParameter.CommonTempData = fieldName;
|
||||
}
|
||||
else
|
||||
{
|
||||
base.Context.Result.Append(fieldName);
|
||||
}
|
||||
break;
|
||||
case ResolveExpressType.SelectMultiple:
|
||||
fieldName = getMultipleName(parameter, expression, isLeft);
|
||||
base.Context.Result.Append(fieldName);
|
||||
if (isSetTempData)
|
||||
{
|
||||
baseParameter.CommonTempData = fieldName;
|
||||
}
|
||||
else
|
||||
{
|
||||
base.Context.Result.Append(fieldName);
|
||||
}
|
||||
break;
|
||||
case ResolveExpressType.WhereSingle:
|
||||
if (isSetTempData)
|
||||
|
@@ -22,48 +22,85 @@ namespace SqlSugar
|
||||
{
|
||||
case ResolveExpressType.WhereSingle:
|
||||
case ResolveExpressType.WhereMultiple:
|
||||
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);
|
||||
WhereMethod(parameter, isLeft, name, args, model);
|
||||
break;
|
||||
case ResolveExpressType.SelectSingle:
|
||||
case ResolveExpressType.SelectMultiple:
|
||||
SelectMethod(parameter, isLeft, name, args, model);
|
||||
break;
|
||||
case ResolveExpressType.FieldSingle:
|
||||
case ResolveExpressType.FieldMultiple:
|
||||
default:
|
||||
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)
|
||||
{
|
||||
@@ -123,6 +160,16 @@ namespace SqlSugar
|
||||
return this.Context.DbMehtods.Replace(model);
|
||||
case "Length":
|
||||
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:
|
||||
break;
|
||||
}
|
||||
|
@@ -51,6 +51,11 @@ namespace SqlSugar
|
||||
parameter.Context.Result.Append(base.Context.GetAsString(memberName, parameterName));
|
||||
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)
|
||||
{
|
||||
if (base.Context.Result.IsLockCurrentParameter == false)
|
||||
@@ -90,9 +95,10 @@ namespace SqlSugar
|
||||
var listProperties = item.Type.GetProperties().Cast<PropertyInfo>().ToList();
|
||||
foreach (var property in listProperties)
|
||||
{
|
||||
if (this.Context.IgnoreComumnList != null
|
||||
if (this.Context.IgnoreComumnList != null
|
||||
&& 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;
|
||||
}
|
||||
if (property.PropertyType.IsClass())
|
||||
@@ -101,7 +107,7 @@ namespace SqlSugar
|
||||
}
|
||||
else
|
||||
{
|
||||
var asName = "["+item.Type.Name + "." + property.Name+"]";
|
||||
var asName = "[" + item.Type.Name + "." + property.Name + "]";
|
||||
var columnName = property.Name;
|
||||
if (Context.IsJoin)
|
||||
{
|
||||
|
Reference in New Issue
Block a user