mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-09-19 18:22:23 +08:00
-
This commit is contained in:
Binary file not shown.
22
OrmTest/ExpressionTest/Field.cs
Normal file
22
OrmTest/ExpressionTest/Field.cs
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
using OrmTest.Models;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace OrmTest.ExpressionTest
|
||||||
|
{
|
||||||
|
public class Field
|
||||||
|
{
|
||||||
|
internal static void Init()
|
||||||
|
{
|
||||||
|
Expression<Func<Student, object>> exp = it=>it.Name;
|
||||||
|
ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.FieldMultiple);
|
||||||
|
expContext.Resolve();
|
||||||
|
var selectorValue = expContext.Result.GetString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -14,7 +14,7 @@ namespace OrmTest.ExpressionTest
|
|||||||
internal static void Init()
|
internal static void Init()
|
||||||
{
|
{
|
||||||
DateTime b = DateTime.Now;
|
DateTime b = DateTime.Now;
|
||||||
int count = 10000;
|
int count = 1;
|
||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
single();
|
single();
|
||||||
@@ -29,8 +29,7 @@ namespace OrmTest.ExpressionTest
|
|||||||
private static void Multiple()
|
private static void Multiple()
|
||||||
{
|
{
|
||||||
Expression<Func<Student,School, object>> exp = (it,school) => new Student() { Name = "a", Id = it.Id, SchoolId = school.Id };
|
Expression<Func<Student,School, object>> exp = (it,school) => new Student() { Name = "a", Id = it.Id, SchoolId = school.Id };
|
||||||
ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.WhereSingle);
|
ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.SelectMultiple);
|
||||||
expContext.ResolveType = ResolveExpressType.SelectMultiple;
|
|
||||||
expContext.Resolve();
|
expContext.Resolve();
|
||||||
var selectorValue = expContext.Result.GetString();
|
var selectorValue = expContext.Result.GetString();
|
||||||
var pars = expContext.Parameters;
|
var pars = expContext.Parameters;
|
||||||
@@ -38,8 +37,7 @@ namespace OrmTest.ExpressionTest
|
|||||||
private static void MultipleDynamic()
|
private static void MultipleDynamic()
|
||||||
{
|
{
|
||||||
Expression<Func<Student, School, object>> exp = (it, school) => new{ Name = "a", Id = it.Id, SchoolId = school.Id };
|
Expression<Func<Student, School, object>> exp = (it, school) => new{ Name = "a", Id = it.Id, SchoolId = school.Id };
|
||||||
ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.WhereSingle);
|
ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.SelectMultiple);
|
||||||
expContext.ResolveType = ResolveExpressType.SelectMultiple;
|
|
||||||
expContext.Resolve();
|
expContext.Resolve();
|
||||||
var selectorValue = expContext.Result.GetString();
|
var selectorValue = expContext.Result.GetString();
|
||||||
var pars = expContext.Parameters;
|
var pars = expContext.Parameters;
|
||||||
@@ -48,8 +46,7 @@ namespace OrmTest.ExpressionTest
|
|||||||
{
|
{
|
||||||
int p = 1;
|
int p = 1;
|
||||||
Expression<Func<Student, object>> exp = it => new Student() { Name = "a", Id = it.Id, SchoolId = p };
|
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.SelectSingle);
|
||||||
expContext.ResolveType = ResolveExpressType.SelectSingle;
|
|
||||||
expContext.Resolve();
|
expContext.Resolve();
|
||||||
var selectorValue = expContext.Result.GetString();
|
var selectorValue = expContext.Result.GetString();
|
||||||
var pars = expContext.Parameters;
|
var pars = expContext.Parameters;
|
||||||
@@ -59,8 +56,7 @@ namespace OrmTest.ExpressionTest
|
|||||||
{
|
{
|
||||||
string a = "a";
|
string a = "a";
|
||||||
Expression<Func<Student, object>> exp = it => new { x = it.Id, shoolid = 1, name = 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.SelectSingle);
|
||||||
expContext.ResolveType = ResolveExpressType.SelectSingle;
|
|
||||||
expContext.Resolve();
|
expContext.Resolve();
|
||||||
var selectorValue = expContext.Result.GetString();
|
var selectorValue = expContext.Result.GetString();
|
||||||
var pars = expContext.Parameters;
|
var pars = expContext.Parameters;
|
||||||
|
@@ -43,6 +43,7 @@
|
|||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="ExpressionTest\Field.cs" />
|
||||||
<Compile Include="ExpressionTest\Select.cs" />
|
<Compile Include="ExpressionTest\Select.cs" />
|
||||||
<Compile Include="ExpressionTest\Where.cs" />
|
<Compile Include="ExpressionTest\Where.cs" />
|
||||||
<Compile Include="Models\School.cs" />
|
<Compile Include="Models\School.cs" />
|
||||||
|
@@ -24,6 +24,7 @@ namespace OrmTest
|
|||||||
|
|
||||||
|
|
||||||
OrmTest.ExpressionTest.Select.Init();
|
OrmTest.ExpressionTest.Select.Init();
|
||||||
|
OrmTest.ExpressionTest.Field.Init();
|
||||||
|
|
||||||
|
|
||||||
Program.id = "xx";
|
Program.id = "xx";
|
||||||
|
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.
@@ -7,6 +7,11 @@ using System.Linq.Expressions;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
namespace SqlSugar
|
namespace SqlSugar
|
||||||
{
|
{
|
||||||
|
///<summary>
|
||||||
|
/// ** description:Expression to sql
|
||||||
|
/// ** author:sunkaixuan
|
||||||
|
/// ** date:2017/1/14
|
||||||
|
/// ** qq:610262374
|
||||||
public class ExpressionContext : ExpResolveAccessory
|
public class ExpressionContext : ExpResolveAccessory
|
||||||
{
|
{
|
||||||
#region constructor
|
#region constructor
|
||||||
@@ -24,7 +29,7 @@ namespace SqlSugar
|
|||||||
#region properties
|
#region properties
|
||||||
public IDbMethods DbMehtods { get; set; }
|
public IDbMethods DbMehtods { get; set; }
|
||||||
public int Index { get; set; }
|
public int Index { get; set; }
|
||||||
public ResolveExpressType ResolveType { get; set; }
|
internal ResolveExpressType ResolveType { get; set; }
|
||||||
public Expression Expression { get; set; }
|
public Expression Expression { get; set; }
|
||||||
public ExpressionResult Result
|
public ExpressionResult Result
|
||||||
{
|
{
|
||||||
|
@@ -13,6 +13,15 @@ namespace SqlSugar
|
|||||||
var expression = base.Expression as ConstantExpression;
|
var expression = base.Expression as ConstantExpression;
|
||||||
var isLeft = parameter.IsLeft;
|
var isLeft = parameter.IsLeft;
|
||||||
object value = expression.Value;
|
object value = expression.Value;
|
||||||
|
switch (parameter.Context.ResolveType)
|
||||||
|
{
|
||||||
|
case ResolveExpressType.WhereSingle:
|
||||||
|
case ResolveExpressType.WhereMultiple:
|
||||||
|
case ResolveExpressType.SelectSingle:
|
||||||
|
case ResolveExpressType.SelectMultiple:
|
||||||
|
case ResolveExpressType.FieldSingle:
|
||||||
|
case ResolveExpressType.FieldMultiple:
|
||||||
|
default:
|
||||||
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()
|
||||||
@@ -22,6 +31,8 @@ namespace SqlSugar
|
|||||||
ExpressionType = expression.GetType()
|
ExpressionType = expression.GetType()
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -14,6 +14,15 @@ 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.GetMemberValue(expression.Member, expression);
|
object value = ExpressionTool.GetMemberValue(expression.Member, expression);
|
||||||
|
switch (parameter.Context.ResolveType)
|
||||||
|
{
|
||||||
|
case ResolveExpressType.WhereSingle:
|
||||||
|
case ResolveExpressType.WhereMultiple:
|
||||||
|
case ResolveExpressType.SelectSingle:
|
||||||
|
case ResolveExpressType.SelectMultiple:
|
||||||
|
case ResolveExpressType.FieldSingle:
|
||||||
|
case ResolveExpressType.FieldMultiple:
|
||||||
|
default:
|
||||||
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()
|
||||||
@@ -23,6 +32,8 @@ namespace SqlSugar
|
|||||||
ExpressionType = expression.Expression.GetType()
|
ExpressionType = expression.Expression.GetType()
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -15,29 +15,39 @@ namespace SqlSugar
|
|||||||
switch (parameter.Context.ResolveType)
|
switch (parameter.Context.ResolveType)
|
||||||
{
|
{
|
||||||
case ResolveExpressType.WhereSingle:
|
case ResolveExpressType.WhereSingle:
|
||||||
fieldName = GetFieldNameByWhereSingle(parameter, expression, isLeft);
|
fieldName = getSingleName(parameter, expression, isLeft);
|
||||||
|
base.Context.Result.Append(fieldName);
|
||||||
break;
|
break;
|
||||||
case ResolveExpressType.WhereMultiple:
|
case ResolveExpressType.WhereMultiple:
|
||||||
fieldName = GetFiledNameByWhereMultiple(parameter, expression, isLeft);
|
fieldName = getMultipleName(parameter, expression, isLeft);
|
||||||
|
base.Context.Result.Append(fieldName);
|
||||||
break;
|
break;
|
||||||
case ResolveExpressType.SelectSingle:
|
case ResolveExpressType.SelectSingle:
|
||||||
|
fieldName = getSingleName(parameter, expression, isLeft);
|
||||||
base.Context.Result.Append(fieldName);
|
base.Context.Result.Append(fieldName);
|
||||||
break;
|
break;
|
||||||
case ResolveExpressType.SelectMultiple:
|
case ResolveExpressType.SelectMultiple:
|
||||||
|
fieldName = getMultipleName(parameter, expression, isLeft);
|
||||||
base.Context.Result.Append(fieldName);
|
base.Context.Result.Append(fieldName);
|
||||||
break;
|
break;
|
||||||
case ResolveExpressType.FieldSingle:
|
case ResolveExpressType.FieldSingle:
|
||||||
|
fieldName = getSingleName(parameter, expression, isLeft);
|
||||||
|
base.Context.Result.Append(fieldName);
|
||||||
break;
|
break;
|
||||||
case ResolveExpressType.FieldMultiple:
|
case ResolveExpressType.FieldMultiple:
|
||||||
|
fieldName = getMultipleName(parameter, expression, isLeft);
|
||||||
|
base.Context.Result.Append(fieldName);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetFiledNameByWhereMultiple(ExpressionParameter parameter, MemberExpression expression, bool? isLeft)
|
private string getMultipleName(ExpressionParameter parameter, MemberExpression expression, bool? isLeft)
|
||||||
{
|
{
|
||||||
string fieldName = expression.Member.ToString();
|
string shortName = expression.Expression.ToString();
|
||||||
|
string fieldName = expression.Member.Name;
|
||||||
|
fieldName = shortName + "." + fieldName;
|
||||||
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()
|
||||||
{
|
{
|
||||||
@@ -48,7 +58,7 @@ namespace SqlSugar
|
|||||||
return fieldName;
|
return fieldName;
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetFieldNameByWhereSingle(ExpressionParameter parameter, MemberExpression expression, bool? isLeft)
|
private string getSingleName(ExpressionParameter parameter, MemberExpression expression, bool? isLeft)
|
||||||
{
|
{
|
||||||
string fieldName = expression.Member.Name;
|
string fieldName = expression.Member.Name;
|
||||||
if (parameter.BaseParameter.BinaryExpressionInfoList != null)
|
if (parameter.BaseParameter.BinaryExpressionInfoList != null)
|
||||||
|
@@ -53,6 +53,7 @@ namespace SqlSugar
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
var memberExpression = (MemberExpression)memberAssignment.Expression;
|
var memberExpression = (MemberExpression)memberAssignment.Expression;
|
||||||
if (memberExpression.Expression.NodeType.IsIn(ExpressionType.Constant))
|
if (memberExpression.Expression.NodeType.IsIn(ExpressionType.Constant))
|
||||||
{
|
{
|
||||||
@@ -61,7 +62,7 @@ namespace SqlSugar
|
|||||||
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 if (memberExpression.Expression.NodeType.IsIn(ExpressionType.Parameter))
|
||||||
{
|
{
|
||||||
var fieldNme = (memberExpression).Member.Name;
|
var fieldNme = (memberExpression).Member.Name;
|
||||||
if (isSingle)
|
if (isSingle)
|
||||||
@@ -71,9 +72,13 @@ namespace SqlSugar
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
var shortName = memberExpression.Expression.ToString();
|
var shortName = memberExpression.Expression.ToString();
|
||||||
parameter.Context.Result.Append(shortName+"."+fieldNme);
|
parameter.Context.Result.Append(shortName + "." + fieldNme);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Check.ThrowNotSupportedException(memberExpression.Expression.NodeType.ToString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -9,6 +9,7 @@ namespace SqlSugar
|
|||||||
/// ** description:Create database access object
|
/// ** description:Create database access object
|
||||||
/// ** author:sunkaixuan
|
/// ** author:sunkaixuan
|
||||||
/// ** date:2017/1/2
|
/// ** date:2017/1/2
|
||||||
|
/// ** qq:610262374
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class SqlSugarClient : SqlSugarAccessory, IDisposable
|
public partial class SqlSugarClient : SqlSugarAccessory, IDisposable
|
||||||
{
|
{
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user