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