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 List<Expression> ExpressionList { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
public string ParentName { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ using System.Collections.ObjectModel;
|
|||||||
using NetTaste;
|
using NetTaste;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
using System.Xml.Linq;
|
using System.Xml.Linq;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
|
||||||
|
|
||||||
namespace SqlSugar
|
namespace SqlSugar
|
||||||
@ -597,7 +598,7 @@ namespace SqlSugar
|
|||||||
AddMappingNavProperties(dic, navInfo, entityColumns);
|
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)
|
foreach (var item in dic)
|
||||||
{
|
{
|
||||||
@ -617,6 +618,22 @@ namespace SqlSugar
|
|||||||
};
|
};
|
||||||
navInfo.MappingNavProperties.Add(item.Key, mappingNavColumnInfo);
|
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 rightName = item.Value.Name;
|
||||||
var rightColumnInfo = columnInfos.FirstOrDefault(a => a.PropertyName == rightName);
|
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 rightValue=rightColumnInfo.PropertyInfo.GetValue(rightObject);
|
||||||
var leftName = item.Key;
|
var leftName = item.Key;
|
||||||
|
if (anyParent)
|
||||||
|
{
|
||||||
|
rightValue = rightValue.GetType().GetProperty(item.Value.Name).GetValue(rightValue);
|
||||||
|
}
|
||||||
//// var rightColumn=col
|
//// var rightColumn=col
|
||||||
// object value = item;
|
// object value = item;
|
||||||
if (item.Value.ExpressionList.Count > 1 && rightValue != null)
|
if (item.Value.ExpressionList.Count > 1 && rightValue != null)
|
||||||
|
@ -101,6 +101,35 @@ namespace SqlSugar
|
|||||||
}
|
}
|
||||||
return isNav;
|
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)
|
internal static bool IsSqlParameterDbType(ExpressionContext context, Expression member)
|
||||||
{
|
{
|
||||||
var isNav = false;
|
var isNav = false;
|
||||||
|
Loading…
Reference in New Issue
Block a user