mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-08-01 10:10:16 +08:00
Update .NET
This commit is contained in:
parent
47d9fe26b7
commit
c45ba3f7a1
@ -55,14 +55,29 @@ namespace SqlSugar
|
|||||||
{
|
{
|
||||||
if (value == null) return value;
|
if (value == null) return value;
|
||||||
var type = value.GetType();
|
var type = value.GetType();
|
||||||
if (type.IsEnum()&& type != typeof(DateType)&& type!=typeof(JoinType)&&type!=typeof(OrderByType)) return Convert.ToInt64(value);
|
if (type.IsEnum() && type != typeof(DateType) && type != typeof(JoinType) && type != typeof(OrderByType)) return Convert.ToInt64(value);
|
||||||
else
|
else
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
public static Type GetMemberInfoType(MemberInfo member)
|
||||||
|
{
|
||||||
|
switch (member.MemberType)
|
||||||
|
{
|
||||||
|
case MemberTypes.Event:
|
||||||
|
return ((EventInfo)member).EventHandlerType;
|
||||||
|
case MemberTypes.Field:
|
||||||
|
return ((FieldInfo)member).FieldType;
|
||||||
|
case MemberTypes.Method:
|
||||||
|
return ((MethodInfo)member).ReturnType;
|
||||||
|
case MemberTypes.Property:
|
||||||
|
return ((PropertyInfo)member).PropertyType;
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
public static bool IsLogicOperator(string operatorValue)
|
public static bool IsLogicOperator(string operatorValue)
|
||||||
{
|
{
|
||||||
return operatorValue == "&&" || operatorValue == "||"||operatorValue == "AND" || operatorValue == "OR";
|
return operatorValue == "&&" || operatorValue == "||" || operatorValue == "AND" || operatorValue == "OR";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool IsLogicOperator(Expression expression)
|
public static bool IsLogicOperator(Expression expression)
|
||||||
@ -100,7 +115,7 @@ namespace SqlSugar
|
|||||||
{
|
{
|
||||||
reval = GetPropertyValue(memberExpr);
|
reval = GetPropertyValue(memberExpr);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
reval = null;
|
reval = null;
|
||||||
}
|
}
|
||||||
@ -118,7 +133,8 @@ namespace SqlSugar
|
|||||||
}
|
}
|
||||||
// fetch the root object reference:
|
// fetch the root object reference:
|
||||||
var constExpr = expression as ConstantExpression;
|
var constExpr = expression as ConstantExpression;
|
||||||
if (constExpr == null) {
|
if (constExpr == null)
|
||||||
|
{
|
||||||
return DynamicInvoke(rootExpression);
|
return DynamicInvoke(rootExpression);
|
||||||
}
|
}
|
||||||
object objReference = constExpr.Value;
|
object objReference = constExpr.Value;
|
||||||
@ -131,7 +147,7 @@ namespace SqlSugar
|
|||||||
var objProp = objReference.GetType().GetProperty(mi.Name);
|
var objProp = objReference.GetType().GetProperty(mi.Name);
|
||||||
if (objProp == null)
|
if (objProp == null)
|
||||||
{
|
{
|
||||||
objReference = DynamicInvoke(expression, rootExpression==null?memberExpr: rootExpression);
|
objReference = DynamicInvoke(expression, rootExpression == null ? memberExpr : rootExpression);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -143,7 +159,7 @@ namespace SqlSugar
|
|||||||
var objField = objReference.GetType().GetField(mi.Name);
|
var objField = objReference.GetType().GetField(mi.Name);
|
||||||
if (objField == null)
|
if (objField == null)
|
||||||
{
|
{
|
||||||
objReference = DynamicInvoke(expression, rootExpression==null?memberExpr: rootExpression);
|
objReference = DynamicInvoke(expression, rootExpression == null ? memberExpr : rootExpression);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -190,7 +206,7 @@ namespace SqlSugar
|
|||||||
public static bool IsConstExpression(MemberExpression memberExpr)
|
public static bool IsConstExpression(MemberExpression memberExpr)
|
||||||
{
|
{
|
||||||
var result = false;
|
var result = false;
|
||||||
while (memberExpr!=null&&memberExpr.Expression != null)
|
while (memberExpr != null && memberExpr.Expression != null)
|
||||||
{
|
{
|
||||||
var isConst = memberExpr.Expression is ConstantExpression;
|
var isConst = memberExpr.Expression is ConstantExpression;
|
||||||
if (isConst)
|
if (isConst)
|
||||||
@ -233,10 +249,10 @@ namespace SqlSugar
|
|||||||
return reval;
|
return reval;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static object DynamicInvoke(Expression expression,MemberExpression memberExpression=null)
|
public static object DynamicInvoke(Expression expression, MemberExpression memberExpression = null)
|
||||||
{
|
{
|
||||||
object value = Expression.Lambda(expression).Compile().DynamicInvoke();
|
object value = Expression.Lambda(expression).Compile().DynamicInvoke();
|
||||||
if (value != null && value.GetType().IsClass() && value.GetType() != UtilConstants.StringType&& memberExpression!=null)
|
if (value != null && value.GetType().IsClass() && value.GetType() != UtilConstants.StringType && memberExpression != null)
|
||||||
{
|
{
|
||||||
value = Expression.Lambda(memberExpression).Compile().DynamicInvoke();
|
value = Expression.Lambda(memberExpression).Compile().DynamicInvoke();
|
||||||
}
|
}
|
||||||
|
@ -242,10 +242,28 @@ namespace SqlSugar
|
|||||||
MemberAssignment memberAssignment = (MemberAssignment)binding;
|
MemberAssignment memberAssignment = (MemberAssignment)binding;
|
||||||
var memberName = memberAssignment.Member.Name;
|
var memberName = memberAssignment.Member.Name;
|
||||||
var item = memberAssignment.Expression;
|
var item = memberAssignment.Expression;
|
||||||
|
if (IsNullable(item) && item is UnaryExpression)
|
||||||
|
{
|
||||||
|
var memtype = ExpressionTool.GetMemberInfoType(memberAssignment.Member);
|
||||||
|
if (IsNullable(memtype) && UtilMethods.GetUnderType(memtype) == UtilMethods.GetUnderType(item.Type))
|
||||||
|
{
|
||||||
|
item = (item as UnaryExpression).Operand;
|
||||||
|
}
|
||||||
|
}
|
||||||
ResolveNewExpressions(parameter, item, memberName);
|
ResolveNewExpressions(parameter, item, memberName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static bool IsNullable(Type memtype)
|
||||||
|
{
|
||||||
|
return memtype.Name == "Nullable`1";
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool IsNullable(Expression item)
|
||||||
|
{
|
||||||
|
return item.Type.Name == "Nullable`1";
|
||||||
|
}
|
||||||
|
|
||||||
//private bool IsSubMethod(MethodCallExpression express)
|
//private bool IsSubMethod(MethodCallExpression express)
|
||||||
//{
|
//{
|
||||||
// return SubTools.SubItemsConst.Any(it =>express.Object != null && express.Object.Type.Name == "Subqueryable`1");
|
// return SubTools.SubItemsConst.Any(it =>express.Object != null && express.Object.Type.Name == "Subqueryable`1");
|
||||||
|
Loading…
Reference in New Issue
Block a user