Update .NET

This commit is contained in:
skx 2020-12-17 14:44:12 +08:00
parent 47d9fe26b7
commit c45ba3f7a1
2 changed files with 44 additions and 10 deletions

View File

@ -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();
} }

View File

@ -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");