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() 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); ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.WhereSingle);
expContext.ResolveType = ResolveExpressType.SelectSingle; 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() public string GetString()
{ {
if (_Result == null) return null; if (_Result == null) return null;
return _Result.ToString(); return _Result.ToString().TrimEnd(',');
} }
#region functions #region functions
public string[] GetResultArray() public string[] GetResultArray()
@@ -64,6 +64,7 @@ namespace SqlSugar
case ResolveExpressType.WhereMultiple: case ResolveExpressType.WhereMultiple:
break; break;
case ResolveExpressType.SelectSingle: case ResolveExpressType.SelectSingle:
parameter=parameter + ",";
break; break;
case ResolveExpressType.SelectMultiple: case ResolveExpressType.SelectMultiple:
break; 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 memberInfos = new Stack<MemberInfo>();
var fieldInfo = member as System.Reflection.FieldInfo; var fieldInfo = member as System.Reflection.FieldInfo;
@@ -168,5 +168,14 @@ namespace SqlSugar
return value; 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 get
{ {
if (base._Parameters == null)
base._Parameters = new List<SugarParameter>();
return base._Parameters; return base._Parameters;
} }
set set
@@ -66,6 +68,11 @@ namespace SqlSugar
{ {
return name; return name;
} }
public virtual void Resolve()
{
BaseResolve resolve = new BaseResolve(new ExpressionParameter() { Expression = this.Expression, Context = this });
resolve.Start();
}
#endregion #endregion
} }
} }

View File

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

View File

@@ -2,6 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Linq.Expressions; using System.Linq.Expressions;
using System.Reflection;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace SqlSugar namespace SqlSugar
@@ -18,6 +19,7 @@ namespace SqlSugar
case ResolveExpressType.WhereMultiple: case ResolveExpressType.WhereMultiple:
break; break;
case ResolveExpressType.SelectSingle: case ResolveExpressType.SelectSingle:
SelectSingle(expression, parameter);
break; break;
case ResolveExpressType.SelectMultiple: case ResolveExpressType.SelectMultiple:
break; break;
@@ -29,5 +31,45 @@ namespace SqlSugar
break; 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.