mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-09-19 18:22:23 +08:00
Optimization EXP analysis
This commit is contained in:
@@ -17,34 +17,34 @@ namespace OrmTest
|
|||||||
{
|
{
|
||||||
static void Main(string[] args)
|
static void Main(string[] args)
|
||||||
{
|
{
|
||||||
//// /***Unit Test***/
|
// /***Unit Test***/
|
||||||
//new Select(1).Init();
|
new Select(1).Init();
|
||||||
//new Field(1).Init();
|
new Field(1).Init();
|
||||||
//new Where(1).Init();
|
new Where(1).Init();
|
||||||
//new Method(1).Init();
|
new Method(1).Init();
|
||||||
//new JoinQuery(1).Init();
|
new JoinQuery(1).Init();
|
||||||
//new SingleQuery(1).Init();
|
new SingleQuery(1).Init();
|
||||||
//new SelectQuery(1).Init();
|
new SelectQuery(1).Init();
|
||||||
//new AutoClose(1).Init();
|
new AutoClose(1).Init();
|
||||||
//new Insert(1).Init();
|
new Insert(1).Init();
|
||||||
//new Delete(1).Init();
|
new Delete(1).Init();
|
||||||
//new Update(1).Init();
|
new Update(1).Init();
|
||||||
//new Mapping(1).Init();
|
new Mapping(1).Init();
|
||||||
//new DataTest(1).Init();
|
new DataTest(1).Init();
|
||||||
|
|
||||||
///***Performance Test***/
|
/***Performance Test***/
|
||||||
//new SqlSugarPerformance(100).Select();
|
new SqlSugarPerformance(100).Select();
|
||||||
|
|
||||||
/***Demo***/
|
/***Demo***/
|
||||||
OrmTest.Demo.Query.Init();
|
OrmTest.Demo.Query.Init();
|
||||||
//OrmTest.Demo.Insert.Init();
|
OrmTest.Demo.Insert.Init();
|
||||||
//OrmTest.Demo.Delete.Init();
|
OrmTest.Demo.Delete.Init();
|
||||||
//OrmTest.Demo.Update.Init();
|
OrmTest.Demo.Update.Init();
|
||||||
//OrmTest.Demo.DbFirst.Init();
|
OrmTest.Demo.DbFirst.Init();
|
||||||
//OrmTest.Demo.JoinSql.Init();
|
OrmTest.Demo.JoinSql.Init();
|
||||||
//OrmTest.Demo.Filter.Init();
|
OrmTest.Demo.Filter.Init();
|
||||||
//OrmTest.Demo.ComplexModel.Init();
|
OrmTest.Demo.ComplexModel.Init();
|
||||||
//OrmTest.Demo.CodeFirst.Init();
|
OrmTest.Demo.CodeFirst.Init();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -70,10 +70,10 @@ namespace SqlSugar
|
|||||||
var memberInfos = new Stack<MemberInfo>();
|
var memberInfos = new Stack<MemberInfo>();
|
||||||
var fieldInfo = member as System.Reflection.FieldInfo;
|
var fieldInfo = member as System.Reflection.FieldInfo;
|
||||||
object reval = null;
|
object reval = null;
|
||||||
// "descend" toward's the root object reference:
|
MemberExpression memberExpr = null;
|
||||||
while (expression is MemberExpression)
|
while (expression is MemberExpression)
|
||||||
{
|
{
|
||||||
var memberExpr = expression as MemberExpression;
|
memberExpr = expression as MemberExpression;
|
||||||
memberInfos.Push(memberExpr.Member);
|
memberInfos.Push(memberExpr.Member);
|
||||||
if (memberExpr.Expression == null)
|
if (memberExpr.Expression == null)
|
||||||
{
|
{
|
||||||
@@ -106,18 +106,24 @@ namespace SqlSugar
|
|||||||
var objProp = objReference.GetType().GetProperty(mi.Name);
|
var objProp = objReference.GetType().GetProperty(mi.Name);
|
||||||
if (objProp == null)
|
if (objProp == null)
|
||||||
{
|
{
|
||||||
|
objReference = DynamicInvoke(expression,memberExpr);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
objReference = objProp.GetValue(objReference, null);
|
||||||
}
|
}
|
||||||
objReference = objProp.GetValue(objReference, null);
|
|
||||||
}
|
}
|
||||||
else if (mi.MemberType == MemberTypes.Field)
|
else if (mi.MemberType == MemberTypes.Field)
|
||||||
{
|
{
|
||||||
var objField = objReference.GetType().GetField(mi.Name);
|
var objField = objReference.GetType().GetField(mi.Name);
|
||||||
if (objField == null)
|
if (objField == null)
|
||||||
{
|
{
|
||||||
|
objReference = DynamicInvoke(expression, memberExpr);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
objReference = objField.GetValue(objReference);
|
||||||
}
|
}
|
||||||
objReference = objField.GetValue(objReference);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
reval = objReference;
|
reval = objReference;
|
||||||
@@ -194,12 +200,12 @@ namespace SqlSugar
|
|||||||
return reval;
|
return reval;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static object DynamicInvoke(Expression expression)
|
public static object DynamicInvoke(Expression expression,MemberExpression memberExpression=null)
|
||||||
{
|
{
|
||||||
object value = Expression.Lambda(expression).Compile().DynamicInvoke();
|
object value = Expression.Lambda(expression).Compile().DynamicInvoke();
|
||||||
if (value != null && value.GetType().IsClass() && value.GetType() != ExpressionConst.StringType)
|
if (value != null && value.GetType().IsClass() && value.GetType() != ExpressionConst.StringType&& memberExpression!=null)
|
||||||
{
|
{
|
||||||
value = Expression.Lambda(expression).Compile().DynamicInvoke();
|
value = Expression.Lambda(memberExpression).Compile().DynamicInvoke();
|
||||||
}
|
}
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
|
Reference in New Issue
Block a user