Update exp to sql

This commit is contained in:
skx 2020-12-17 14:36:09 +08:00
parent 8cd2668ae5
commit 47d9fe26b7
3 changed files with 53 additions and 1 deletions

View File

@ -95,9 +95,28 @@ namespace OrmTest
a = it.a.Value a = it.a.Value
}).ToSql(); }).ToSql();
UValidate.Check(x.Key, "SELECT [a] AS [a] FROM [BoolTest2] ", "Queryable"); UValidate.Check(x.Key, "SELECT [a] AS [a] FROM [BoolTest2] ", "Queryable");
Db.CodeFirst.InitTables<UnitDecimal>();
Db.Queryable<UnitDecimal>().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; }
}
/// <summary> /// <summary>
/// 系统用户表实体模型类 /// 系统用户表实体模型类
/// </summary> /// </summary>

View File

@ -59,7 +59,22 @@ namespace SqlSugar
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";

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