Update nav query

This commit is contained in:
sunkaixuan 2023-08-20 17:15:56 +08:00
parent ef61213adc
commit bd3f1db4a0
3 changed files with 33 additions and 1 deletions

View File

@ -727,11 +727,16 @@ namespace SqlSugar
if (properyName != null) if (properyName != null)
{ {
var fkColumnsInfo = entityInfo.Columns.FirstOrDefault(x => x.PropertyName == properyName); var fkColumnsInfo = entityInfo.Columns.FirstOrDefault(x => x.PropertyName == properyName);
var pkColumnsInfo = entityInfo.Columns.FirstOrDefault(x => x.IsPrimarykey);
if (fkColumnsInfo != null) if (fkColumnsInfo != null)
{ {
var fkName = fkColumnsInfo.DbColumnName; var fkName = fkColumnsInfo.DbColumnName;
AppColumns(result, queryable, fkName); AppColumns(result, queryable, fkName);
} }
if (pkColumnsInfo!=null&&fkColumnsInfo == null&&result.SelectString != null && !result.SelectString.Contains(queryable.SqlBuilder.GetTranslationColumnName(pkColumnsInfo.DbColumnName)))
{
AppColumns(result, queryable, pkColumnsInfo.DbColumnName);
}
} }
} }
} }

View File

@ -656,7 +656,12 @@ namespace SqlSugar
} }
foreach (var item in navManages) foreach (var item in navManages)
{ {
var navName = ExpressionTool.GetMemberName(item.Expressions.First()); var FirstExp = item.Expressions.First();
var navName = ExpressionTool.GetMemberName(FirstExp);
if (FirstExp is LambdaExpression &&ExpressionTool.GetMethodName((FirstExp as LambdaExpression).Body) == "ToList")
{
navName = ExpressionTool.GetFirstTypeNameFromExpression(FirstExp);
}
var navColumn = entityColumns.Where(it => it.IsPrimarykey == false).Where(it => it.Navigat != null).FirstOrDefault(it => it.PropertyName == navName); var navColumn = entityColumns.Where(it => it.IsPrimarykey == false).Where(it => it.Navigat != null).FirstOrDefault(it => it.PropertyName == navName);
if (navColumn != null && navColumn.Navigat.NavigatType != NavigateType.ManyToMany) if (navColumn != null && navColumn.Navigat.NavigatType != NavigateType.ManyToMany)
{ {

View File

@ -215,6 +215,28 @@ namespace SqlSugar
return newExp; return newExp;
} }
public static string GetFirstTypeNameFromExpression(Expression expression)
{
if (expression is LambdaExpression lambda)
{
return GetFirstTypeNameFromExpression(lambda.Body);
}
else if (expression is MemberExpression member)
{
return member.Member.Name;
}
else if (expression is NewExpression newExpr)
{
return newExpr.Type.Name;
}
else if (expression is MethodCallExpression methodCall)
{
return GetFirstTypeNameFromExpression(methodCall.Arguments.FirstOrDefault());
}
return "";
}
public static string GetMethodName(Expression expression) public static string GetMethodName(Expression expression)
{ {
if (expression is MethodCallExpression) if (expression is MethodCallExpression)