mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-08-23 22:11:36 +08:00
Update nav query
This commit is contained in:
parent
b85e202871
commit
907ce5bf68
@ -19,5 +19,6 @@ namespace SqlSugar
|
||||
{
|
||||
public List<Expression> ExpressionList { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string ParentName { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -13,6 +13,7 @@ using System.Collections.ObjectModel;
|
||||
using NetTaste;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System.Xml.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
|
||||
namespace SqlSugar
|
||||
@ -597,7 +598,7 @@ namespace SqlSugar
|
||||
AddMappingNavProperties(dic, navInfo, entityColumns);
|
||||
}
|
||||
|
||||
private static void AddMappingNavProperties(Dictionary<string, Expression> dic, AppendNavInfo navInfo, List<EntityColumnInfo> entityColumns)
|
||||
private void AddMappingNavProperties(Dictionary<string, Expression> dic, AppendNavInfo navInfo, List<EntityColumnInfo> entityColumns)
|
||||
{
|
||||
foreach (var item in dic)
|
||||
{
|
||||
@ -617,6 +618,22 @@ namespace SqlSugar
|
||||
};
|
||||
navInfo.MappingNavProperties.Add(item.Key, mappingNavColumnInfo);
|
||||
}
|
||||
else if (ExpressionTool.IsNavMember(this.Context,value))
|
||||
{
|
||||
var mappingNavColumnInfo = new MappingNavColumnInfo()
|
||||
{
|
||||
ExpressionList = expressionTree,
|
||||
Name = name
|
||||
};
|
||||
if (value is MemberExpression exp)
|
||||
{
|
||||
if (exp.Expression is MemberExpression expChild)
|
||||
{
|
||||
mappingNavColumnInfo.ParentName = expChild.Member.Name;
|
||||
}
|
||||
}
|
||||
navInfo.MappingNavProperties.Add(item.Key, mappingNavColumnInfo);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -746,8 +763,17 @@ namespace SqlSugar
|
||||
{
|
||||
var rightName = item.Value.Name;
|
||||
var rightColumnInfo = columnInfos.FirstOrDefault(a => a.PropertyName == rightName);
|
||||
var anyParent = item.Value.ParentName.HasValue();
|
||||
if (anyParent)
|
||||
{
|
||||
rightColumnInfo = columnInfos.FirstOrDefault(a => a.PropertyName == item.Value.ParentName);
|
||||
}
|
||||
var rightValue=rightColumnInfo.PropertyInfo.GetValue(rightObject);
|
||||
var leftName = item.Key;
|
||||
if (anyParent)
|
||||
{
|
||||
rightValue = rightValue.GetType().GetProperty(item.Value.Name).GetValue(rightValue);
|
||||
}
|
||||
//// var rightColumn=col
|
||||
// object value = item;
|
||||
if (item.Value.ExpressionList.Count > 1 && rightValue != null)
|
||||
|
@ -101,6 +101,35 @@ namespace SqlSugar
|
||||
}
|
||||
return isNav;
|
||||
}
|
||||
internal static bool IsNavMember(ISqlSugarClient context, Expression member)
|
||||
{
|
||||
var isNav = false;
|
||||
if (member is MemberExpression && (member as MemberExpression)?.Type?.IsClass() == true)
|
||||
{
|
||||
var memberExp = (member as MemberExpression);
|
||||
var name = memberExp?.Member?.Name;
|
||||
var type = memberExp?.Type;
|
||||
if (name != null && type != null && memberExp.Expression is ParameterExpression)
|
||||
{
|
||||
var rootExp = (memberExp.Expression as ParameterExpression);
|
||||
var entityInfo = context?.EntityMaintenance?.GetEntityInfo(rootExp.Type);
|
||||
var navColumn = entityInfo.Columns.FirstOrDefault(it => it.PropertyName == name);
|
||||
isNav = navColumn?.Navigat != null;
|
||||
}
|
||||
else if (name != null && type != null && memberExp.Expression is MemberExpression)
|
||||
{
|
||||
var rootExp = (memberExp.Expression as MemberExpression);
|
||||
if (rootExp.Type.IsClass()&&type.IsArray==false&&type.FullName.IsCollectionsList()==false)
|
||||
{
|
||||
var entityInfo = context?.EntityMaintenance?.GetEntityInfo(rootExp.Type);
|
||||
var navColumn = entityInfo.Columns.FirstOrDefault(it => it.PropertyName == name);
|
||||
isNav = navColumn?.Navigat != null;
|
||||
}
|
||||
}
|
||||
}
|
||||
return isNav;
|
||||
}
|
||||
|
||||
internal static bool IsSqlParameterDbType(ExpressionContext context, Expression member)
|
||||
{
|
||||
var isNav = false;
|
||||
|
Loading…
Reference in New Issue
Block a user