diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSeverTest/UnitTest/UQueryable.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSeverTest/UnitTest/UQueryable.cs index f8c122219..d59fb4b45 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSeverTest/UnitTest/UQueryable.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSeverTest/UnitTest/UQueryable.cs @@ -95,9 +95,28 @@ namespace OrmTest a = it.a.Value }).ToSql(); UValidate.Check(x.Key, "SELECT [a] AS [a] FROM [BoolTest2] ", "Queryable"); + + Db.CodeFirst.InitTables(); + + Db.Queryable().Select(it => + + new UnitDecimal2 + { + x1 = it.x1 * it.x2 + }).ToList(); } + + public class UnitDecimal + { + public decimal x1 { get; set; } + public decimal x2 { get; set; } + } + public class UnitDecimal2 { + public decimal? x1 { get; set; } + } + /// /// 系统用户表实体模型类 /// diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs index 50fbe4123..4517ec28f 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs @@ -59,7 +59,22 @@ namespace SqlSugar else 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) { return operatorValue == "&&" || operatorValue == "||"||operatorValue == "AND" || operatorValue == "OR"; diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs index d34c7feab..e42f26bd8 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs @@ -242,10 +242,28 @@ namespace SqlSugar MemberAssignment memberAssignment = (MemberAssignment)binding; var memberName = memberAssignment.Member.Name; 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); } } + 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) //{ // return SubTools.SubItemsConst.Any(it =>express.Object != null && express.Object.Type.Name == "Subqueryable`1");