mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-10-15 18:55:07 +08:00
-
This commit is contained in:
Binary file not shown.
@@ -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.
Binary file not shown.
@@ -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;
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
}
|
||||
}
|
||||
|
@@ -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()
|
||||
|
@@ -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.
Reference in New Issue
Block a user