This commit is contained in:
sunkaixuan 2017-01-14 20:04:23 +08:00
parent a99c807ff8
commit eedb57ae6c
16 changed files with 43 additions and 25 deletions

Binary file not shown.

View File

@ -14,27 +14,29 @@ namespace OrmTest.ExpressionTest
internal static void Init() internal static void Init()
{ {
o1(); single();
o2(); singleDynamic();
} }
private static void o1() private static void single()
{ {
Expression<Func<Student, object>> exp = it => new Student() { Name = "a", Id=it.Id }; int p = 1;
Expression<Func<Student, object>> exp = it => new Student() { Name = "a", Id=it.Id, SchoolId=p };
ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.WhereSingle); ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.WhereSingle);
expContext.ResolveType = ResolveExpressType.SelectSingle; expContext.ResolveType = ResolveExpressType.SelectSingle;
expContext.Resolve(); expContext.Resolve();
var x = expContext.Result.GetString(); var selectorValue = expContext.Result.GetString();
var pars = expContext.Parameters; var pars = expContext.Parameters;
} }
private static void o2() private static void singleDynamic()
{ {
Expression<Func<Student, object>> exp = it =>new { x = "a" }; string a = "a";
Expression<Func<Student, object>> exp = it =>new { x = it.Id, shoolid=1,name=a };
ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.WhereSingle); ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.WhereSingle);
expContext.ResolveType = ResolveExpressType.SelectSingle; expContext.ResolveType = ResolveExpressType.SelectSingle;
expContext.Resolve(); expContext.Resolve();
var x = expContext.Result.GetString(); var selectorValue = expContext.Result.GetString();
var pars = expContext.Parameters; var pars = expContext.Parameters;
} }
} }

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -177,5 +177,15 @@ namespace SqlSugar
return ((FieldInfo)propertyOrField).FieldType; return ((FieldInfo)propertyOrField).FieldType;
throw new NotSupportedException(); throw new NotSupportedException();
} }
public static bool IsEntity(Type type)
{
return type.IsClass && type!=ExpressionConst.StringType;
}
public static bool IsValueType(Type type)
{
return !IsEntity(type);
}
} }
} }

View File

@ -43,33 +43,30 @@ namespace SqlSugar
throw new NotSupportedException(); throw new NotSupportedException();
} }
MemberAssignment memberAssignment = (MemberAssignment)binding; MemberAssignment memberAssignment = (MemberAssignment)binding;
MemberInfo member = memberAssignment.Member; if (memberAssignment.Expression.NodeType == ExpressionType.Constant)
Type memberType = ExpressionTool.GetPropertyOrFieldType(member);
var name = memberType.Name;
var isValueType = memberType.IsValueType || memberType == ExpressionConst.StringType;
if (isValueType)
{ {
if (memberAssignment.Expression.NodeType==ExpressionType.Constant) var value = ((ConstantExpression)memberAssignment.Expression).Value;
string parameterName = this.Context.SqlParameterKeyWord + "constant" + i;
parameter.Context.Result.Append(parameterName);
this.Context.Parameters.Add(new SugarParameter(parameterName, value));
}
else
{
var memberExpression = (MemberExpression)memberAssignment.Expression;
if (memberExpression.Expression.NodeType.IsIn(ExpressionType.Constant))
{ {
var value= ((ConstantExpression)memberAssignment.Expression).Value; var value = ExpressionTool.GetMemberValue(memberExpression.Member, memberExpression);
string parameterName = this.Context.SqlParameterKeyWord + "constant" + i; string parameterName = this.Context.SqlParameterKeyWord + "constant" + i;
parameter.Context.Result.Append(parameterName); parameter.Context.Result.Append(parameterName);
this.Context.Parameters.Add(new SugarParameter(parameterName, value)); this.Context.Parameters.Add(new SugarParameter(parameterName, value));
} }
else else
{ {
var memberExpression = (MemberExpression)memberAssignment.Expression;
var fieldNme = (memberExpression).Member.Name; var fieldNme = (memberExpression).Member.Name;
parameter.Context.Result.Append(fieldNme); parameter.Context.Result.Append(fieldNme);
} }
} }
else
{
}
} }
} }
} }
} }

View File

@ -49,9 +49,18 @@ namespace SqlSugar
} }
else else
{ {
var memberExpression = (MemberExpression)Expression; var memberExpression = (MemberExpression)item;
var fieldNme = (memberExpression).Member.Name; if (memberExpression.Expression.NodeType.IsIn(ExpressionType.Constant))
parameter.Context.Result.Append(fieldNme); {
var value =ExpressionTool.GetMemberValue(memberExpression.Member, memberExpression);
string parameterName = this.Context.SqlParameterKeyWord + "constant" + i;
parameter.Context.Result.Append(parameterName);
this.Context.Parameters.Add(new SugarParameter(parameterName, value));
}
else {
var fieldNme = (memberExpression).Member.Name;
parameter.Context.Result.Append(fieldNme);
}
} }
} }
} }

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.