db.Queryable.Includes.Select.ToList

This commit is contained in:
sunkaixuan
2023-05-03 17:01:35 +08:00
parent 3ad8dce255
commit 6b6839bf60
3 changed files with 64 additions and 1 deletions

View File

@@ -1,12 +1,18 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq.Expressions;
using System.Text; using System.Text;
namespace SqlSugar namespace SqlSugar
{ {
internal class AppendNavInfo internal class AppendNavInfo
{ {
public Dictionary<string, string> MappingNavProperties = new Dictionary<string, string>(); public Dictionary<string, MappingNavColumnInfo> MappingNavProperties = new Dictionary<string, MappingNavColumnInfo>();
public Dictionary<string, string> AppendProperties = new Dictionary<string, string>(); public Dictionary<string, string> AppendProperties = new Dictionary<string, string>();
} }
internal class MappingNavColumnInfo
{
public List<Expression> ExpressionList { get; set; }
public string Name { get; set; }
}
} }

View File

@@ -579,6 +579,21 @@ namespace SqlSugar
foreach (var item in dic) foreach (var item in dic)
{ {
var value=item.Value; var value=item.Value;
var expressionTree = new ExpressionTreeVisitor().GetExpressions(value);
if (expressionTree.Any())
{
var name = ExpressionTool.GetMemberName(expressionTree.First());
if (name !=null&& entityColumns.Any(it=>it.Navigat!=null&&it.PropertyName==name))
{
var mappingNavColumnInfo = new MappingNavColumnInfo()
{
ExpressionList= expressionTree ,
Name=name
};
navInfo.MappingNavProperties.Add(item.Key,mappingNavColumnInfo);
}
}
} }
foreach (var item in navManages) foreach (var item in navManages)
{ {

View File

@@ -44,5 +44,47 @@ namespace SqlSugar
return base.VisitMethodCall(node); return base.VisitMethodCall(node);
} }
}
internal class ExpressionTreeVisitor : ExpressionVisitor
{
private readonly List<Expression> _nodes = new List<Expression>();
//protected override Expression VisitBinary(BinaryExpression node)
//{
// // 解析二元操作符表达式
// _nodes.Add(node);
// Visit(node.Left);
// Visit(node.Right);
// return node;
//}
//protected override Expression VisitConstant(ConstantExpression node)
//{
// // 解析常量表达式
// _nodes.Add(node);
// return node;
//}
protected override Expression VisitMember(MemberExpression node)
{
// 解析成员访问表达式
_nodes.Add(node);
return node;
}
protected override Expression VisitMethodCall(MethodCallExpression node)
{
// 解析方法调用表达式
_nodes.Add(node);
if (node.Arguments.Any())
{
Visit(node.Arguments.First());
}
return node;
}
public List<Expression> GetExpressions(Expression expression)
{
Visit(expression);
_nodes.Reverse();
return _nodes;
}
} }
} }