This commit is contained in:
sunkaixuan
2017-01-14 19:15:54 +08:00
parent 3424e2e199
commit 2ea4a63563
18 changed files with 65 additions and 5 deletions

Binary file not shown.

View File

@@ -13,10 +13,11 @@ namespace OrmTest.ExpressionTest
{
internal static void Init()
{
Expression<Func<Student, object>> exp = it => new Program() { x = it.Name };
Expression<Func<Student, object>> exp = it => new Program() { x = "a" };
ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.WhereSingle);
expContext.ResolveType = ResolveExpressType.SelectSingle;
var x = expContext.Result;
expContext.Resolve();
var x = expContext.Result.GetString();
}
}
}

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

@@ -40,7 +40,7 @@ namespace SqlSugar
public string GetString()
{
if (_Result == null) return null;
return _Result.ToString();
return _Result.ToString().TrimEnd(',');
}
#region functions
public string[] GetResultArray()
@@ -64,6 +64,7 @@ namespace SqlSugar
case ResolveExpressType.WhereMultiple:
break;
case ResolveExpressType.SelectSingle:
parameter=parameter + ",";
break;
case ResolveExpressType.SelectMultiple:
break;

View File

@@ -47,7 +47,7 @@ namespace SqlSugar
}
}
public static object GetValue(MemberInfo member, Expression expression)
public static object GetMemberValue(MemberInfo member, Expression expression)
{
var memberInfos = new Stack<MemberInfo>();
var fieldInfo = member as System.Reflection.FieldInfo;
@@ -168,5 +168,14 @@ namespace SqlSugar
return value;
}
public static Type GetPropertyOrFieldType(MemberInfo propertyOrField)
{
if (propertyOrField.MemberType == MemberTypes.Property)
return ((PropertyInfo)propertyOrField).PropertyType;
if (propertyOrField.MemberType == MemberTypes.Field)
return ((FieldInfo)propertyOrField).FieldType;
throw new NotSupportedException();
}
}
}

View File

@@ -45,6 +45,8 @@ namespace SqlSugar
{
get
{
if (base._Parameters == null)
base._Parameters = new List<SugarParameter>();
return base._Parameters;
}
set
@@ -66,6 +68,11 @@ namespace SqlSugar
{
return name;
}
public virtual void Resolve()
{
BaseResolve resolve = new BaseResolve(new ExpressionParameter() { Expression = this.Expression, Context = this });
resolve.Start();
}
#endregion
}
}

View File

@@ -13,7 +13,7 @@ namespace SqlSugar
{
var expression = base.Expression as MemberExpression;
var isLeft = parameter.IsLeft;
object value = ExpressionTool.GetValue(expression.Member, expression);
object value = ExpressionTool.GetMemberValue(expression.Member, expression);
if (parameter.BaseParameter.BinaryExpressionInfoList != null)
{
parameter.BaseParameter.BinaryExpressionInfoList.Add(new KeyValuePair<string, BinaryExpressionInfo>(ExpressionConst.BinaryExpressionInfoListKey, new BinaryExpressionInfo()

View File

@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace SqlSugar
@@ -18,6 +19,7 @@ namespace SqlSugar
case ResolveExpressType.WhereMultiple:
break;
case ResolveExpressType.SelectSingle:
SelectSingle(expression, parameter);
break;
case ResolveExpressType.SelectMultiple:
break;
@@ -29,5 +31,45 @@ namespace SqlSugar
break;
}
}
private void SelectSingle(MemberInitExpression expression, ExpressionParameter parameter)
{
int i = 0;
foreach (MemberBinding binding in expression.Bindings)
{
++i;
if (binding.BindingType != MemberBindingType.Assignment)
{
throw new NotSupportedException();
}
MemberAssignment memberAssignment = (MemberAssignment)binding;
MemberInfo member = memberAssignment.Member;
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;
var fieldNme = (memberExpression).Member.Name;
parameter.Context.Result.Append(fieldNme);
}
}
else
{
}
}
}
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.