mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-08-23 22:11:36 +08:00
db.Queryable.Includes.Select.ToList
This commit is contained in:
parent
c2120f3e44
commit
cf0bdac412
@ -667,28 +667,53 @@ namespace SqlSugar
|
|||||||
var manager = it;
|
var manager = it;
|
||||||
var p = it.GetType().GetProperty("RootList");
|
var p = it.GetType().GetProperty("RootList");
|
||||||
var tType = it.GetType().GenericTypeArguments[0];
|
var tType = it.GetType().GenericTypeArguments[0];
|
||||||
var columns = this.Context.EntityMaintenance.GetEntityInfo(tType)
|
var allColumns = this.Context.EntityMaintenance.GetEntityInfo(tType)
|
||||||
.Columns
|
.Columns;
|
||||||
|
var columns = allColumns
|
||||||
.Where(it=> this.QueryBuilder.AppendNavInfo.Result.First().result.ContainsKey("SugarNav_" + it.PropertyName))
|
.Where(it=> this.QueryBuilder.AppendNavInfo.Result.First().result.ContainsKey("SugarNav_" + it.PropertyName))
|
||||||
.ToList();
|
.ToList();
|
||||||
var listType = typeof(List<>).MakeGenericType(tType);
|
var listType = typeof(List<>).MakeGenericType(tType);
|
||||||
var outList=SelectNavQuery_SetList(result, it, p, tType, columns, listType);
|
var outList=SelectNavQuery_SetList(result, it, p, tType, columns, listType);
|
||||||
it.GetType().GetMethod("Execute").Invoke(it, null);
|
it.GetType().GetMethod("Execute").Invoke(it, null);
|
||||||
SelectNavQuery_MappingList(it,result, outList);
|
SelectNavQuery_MappingList(it,result, outList, allColumns.Where(it=>it.Navigat!=null).ToList());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SelectNavQuery_MappingList<TResult>(object it,List<TResult> result, IList outList)
|
private void SelectNavQuery_MappingList<TResult>(object it,List<TResult> result, IList outList,List<EntityColumnInfo> columnInfos)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < result.Count; i++)
|
for (int i = 0; i < result.Count; i++)
|
||||||
{
|
{
|
||||||
var resultItem = result[i];
|
var leftObject = result[i];
|
||||||
var outListItem = outList[i];
|
var rightObject = outList[i];
|
||||||
foreach (var item in this.QueryBuilder.AppendNavInfo.MappingNavProperties)
|
foreach (var item in this.QueryBuilder.AppendNavInfo.MappingNavProperties)
|
||||||
{
|
{
|
||||||
if (item.Value.ExpressionList.Count > 0)
|
var rightName = item.Value.Name;
|
||||||
|
var rightColumnInfo = columnInfos.FirstOrDefault(it => it.PropertyName == rightName);
|
||||||
|
var rightValue=rightColumnInfo.PropertyInfo.GetValue(rightObject);
|
||||||
|
var leftName = item.Key;
|
||||||
|
//// var rightColumn=col
|
||||||
|
// object value = item;
|
||||||
|
if (item.Value.ExpressionList.Count > 1 && rightValue != null)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
//foreach (var callExp in item.Value.ExpressionList.Skip(1))
|
||||||
|
//{
|
||||||
|
MethodCallExpression meExp = (MethodCallExpression)item.Value.ExpressionList.Last();
|
||||||
|
ParameterExpression ps = ExpressionTool.GetParameters(meExp).First();
|
||||||
|
var comExp = Expression.Lambda(meExp, ps);
|
||||||
|
var obj = comExp.Compile();
|
||||||
|
// 传递参数值
|
||||||
|
var leftValue = obj.DynamicInvoke(rightObject);
|
||||||
|
leftObject.GetType().GetProperty(leftName).SetValue(leftObject, leftValue);
|
||||||
|
// // 重新构造Lambda表达式,将参数替换为新的参数,方法调用替换为新的方法调用
|
||||||
|
// var newExpression = Expression.Lambda<Func<X, List<int>>>(newMethodCallExpr, paramExpr);
|
||||||
|
// Expression.Call(callExp, (callExp as MethodCallExpression).Method,new )
|
||||||
|
// var propertyExpr = Expression.Property(paramExpr, rightName);
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
leftObject.GetType().GetProperty(leftName).SetValue(leftObject, rightValue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -58,6 +58,12 @@ namespace SqlSugar
|
|||||||
ps.Visit(expr);
|
ps.Visit(expr);
|
||||||
return ps.Parameters.Count==0;
|
return ps.Parameters.Count==0;
|
||||||
}
|
}
|
||||||
|
public static List<ParameterExpression> GetParameters(Expression expr)
|
||||||
|
{
|
||||||
|
var ps = new ParameterExpressionVisitor();
|
||||||
|
ps.Visit(expr);
|
||||||
|
return ps.Parameters;
|
||||||
|
}
|
||||||
public static bool IsComparisonOperatorBool(BinaryExpression binaryExp)
|
public static bool IsComparisonOperatorBool(BinaryExpression binaryExp)
|
||||||
{
|
{
|
||||||
return binaryExp.NodeType.IsIn(ExpressionType.Equal,
|
return binaryExp.NodeType.IsIn(ExpressionType.Equal,
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<package >
|
<package >
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>SqlSugarCore</id>
|
<id>SqlSugarCore</id>
|
||||||
<version>5.1.4.68</version>
|
<version>5.1.4.70-preview06</version>
|
||||||
<authors>sunkaixuan</authors>
|
<authors>sunkaixuan</authors>
|
||||||
<owners>果糖大数据科技</owners>
|
<owners>果糖大数据科技</owners>
|
||||||
<licenseUrl>http://www.apache.org/licenses/LICENSE-2.0.html</licenseUrl>
|
<licenseUrl>http://www.apache.org/licenses/LICENSE-2.0.html</licenseUrl>
|
||||||
|
Loading…
Reference in New Issue
Block a user