mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-05-16 04:59:34 +08:00
Update .net core project
This commit is contained in:
parent
6c2ae0f335
commit
0952b28c68
@ -46,6 +46,22 @@ namespace SqlSugar
|
||||
return this.Context.EntityMaintenance.GetEntityInfo<T>();
|
||||
}
|
||||
}
|
||||
public ISugarQueryable<T> IncludeLeftJoin(Expression<Func<T, object>> LeftObject)
|
||||
{
|
||||
MemberExpression memberExpression;
|
||||
string navObjectName;
|
||||
EntityColumnInfo navColumn, navPkColumn;
|
||||
EntityInfo navEntityInfo;
|
||||
ExpressionTool.GetOneToOneInfo(this.Context,LeftObject, out memberExpression, out navObjectName, out navColumn, out navEntityInfo, out navPkColumn);
|
||||
var shortName = $"pnv_{navObjectName}";
|
||||
var mainShortName = memberExpression.Expression.ToString();
|
||||
this.QueryBuilder.TableShortName = mainShortName;
|
||||
var onWhere = $"{shortName}.{navPkColumn.DbColumnName}={mainShortName}.{navColumn.DbColumnName}";
|
||||
UtilMethods.IsNullReturnNew(this.Context.TempItems);
|
||||
this.AddJoinInfo(navEntityInfo.DbTableName, shortName, onWhere, JoinType.Left);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ISugarQueryable<T, T2> LeftJoin<T2>(ISugarQueryable<T2> joinQueryable, Expression<Func<T, T2, bool>> joinExpression)
|
||||
{
|
||||
this.Context.InitMappingInfo<T2>();
|
||||
|
@ -246,7 +246,7 @@ namespace SqlSugar
|
||||
{
|
||||
resolveExpress.PgSqlIsAutoToLower = true;
|
||||
}
|
||||
resolveExpress.SugarContext = new ExpressionOutParameter() { Context = this.Context };
|
||||
resolveExpress.SugarContext = new ExpressionOutParameter() { Context = this.Context, QueryBuilder = this } ;
|
||||
resolveExpress.RootExpression = expression;
|
||||
resolveExpress.JoinQueryInfos = Builder.QueryBuilder.JoinQueryInfos;
|
||||
resolveExpress.IsSingle = IsSingle()&& resolveType!= ResolveExpressType.WhereMultiple;
|
||||
|
@ -6,6 +6,7 @@ using System.Text;
|
||||
|
||||
namespace SqlSugar
|
||||
{
|
||||
|
||||
public class JoinQueryInfo
|
||||
{
|
||||
public JoinType JoinType { get; set; }
|
||||
|
@ -9,5 +9,6 @@ namespace SqlSugar
|
||||
public class ExpressionOutParameter
|
||||
{
|
||||
public SqlSugarProvider Context { get; set; }
|
||||
public QueryBuilder QueryBuilder { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -60,6 +60,33 @@ namespace SqlSugar
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void GetOneToOneInfo<T>(SqlSugarProvider context,Expression<Func<T, object>> LeftObject, out MemberExpression memberExpression, out string navObjectName, out EntityColumnInfo navColumn, out EntityInfo navEntityInfo, out EntityColumnInfo navPkColumn)
|
||||
{
|
||||
memberExpression = ((LeftObject as LambdaExpression).Body as MemberExpression);
|
||||
var listItemType = typeof(T);
|
||||
var listItemEntity = context.EntityMaintenance.GetEntityInfo(listItemType);
|
||||
var listPkColumn = listItemEntity.Columns.Where(it => it.IsPrimarykey).FirstOrDefault();
|
||||
navObjectName = memberExpression.Member.Name;
|
||||
var navObjectName2 = navObjectName;
|
||||
var navObjectNamePropety = listItemType.GetProperty(navObjectName);
|
||||
var navObjectNameColumnInfo = listItemEntity.Columns.First(it => it.PropertyName == navObjectName2);
|
||||
Check.ExceptionEasy(navObjectNameColumnInfo.Navigat == null, $"{navObjectName} not [Navigat(..)] ", $"{navObjectName} 没有导航特性 [Navigat(..)] ");
|
||||
Check.ExceptionEasy(navObjectNameColumnInfo.Navigat.NavigatType != NavigateType.OneToOne, $"IncludeLeftJoin can only be one-on-one ", $"IncludeLeftJoin 只能是一对一 ");
|
||||
navColumn = listItemEntity.Columns.FirstOrDefault(it => it.PropertyName == navObjectNameColumnInfo.Navigat.Name);
|
||||
Check.ExceptionEasy(navColumn == null, "OneToOne navigation configuration error", $"OneToOne导航配置错误: 实体{ listItemEntity.EntityName } 不存在{navObjectNameColumnInfo.Navigat.Name}");
|
||||
var navType = navObjectNamePropety.PropertyType;
|
||||
navEntityInfo = context.EntityMaintenance.GetEntityInfo(navType);
|
||||
context.InitMappingInfo(navEntityInfo.Type);
|
||||
navPkColumn = navEntityInfo.Columns.Where(it => it.IsPrimarykey).FirstOrDefault();
|
||||
Check.ExceptionEasy(navPkColumn == null && navObjectNameColumnInfo.Navigat.Name2 == null, navEntityInfo.EntityName + "need primarykey", navEntityInfo.EntityName + " 需要主键");
|
||||
if (navObjectNameColumnInfo.Navigat.Name2.HasValue())
|
||||
{
|
||||
navPkColumn = navEntityInfo.Columns.Where(it => it.PropertyName == navObjectNameColumnInfo.Navigat.Name2).FirstOrDefault();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static List<ParameterExpression> ExpressionParameters(Expression expression)
|
||||
{
|
||||
List<ParameterExpression> parameters = null;
|
||||
|
@ -3,6 +3,8 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace SqlSugar
|
||||
{
|
||||
public class MemberExpressionResolve : BaseResolve
|
||||
@ -75,9 +77,17 @@ namespace SqlSugar
|
||||
var navN = new OneToOneNavgateExpressionN(this.Context?.SugarContext?.Context);
|
||||
if (nav.IsNavgate(expression))
|
||||
{
|
||||
var value = nav.GetSql();
|
||||
SetNavigateResult();
|
||||
this.Context.SingleTableNameSubqueryShortName = nav.ShorName;
|
||||
if (this.Context?.SugarContext?.QueryBuilder?.JoinQueryInfos != null)
|
||||
{
|
||||
var p=expression.Expression.ObjToString();
|
||||
var querybuilder = this.Context?.SugarContext?.QueryBuilder;
|
||||
var joinInfos = querybuilder.JoinQueryInfos;
|
||||
var joinInfo=joinInfos.FirstOrDefault(it => $"{querybuilder.TableShortName}.{ it.ShortName.Replace("pnv_","")}" == p);
|
||||
if (joinInfo != null)
|
||||
{
|
||||
var columnInfo=nav.ProPertyEntity.Columns.FirstOrDefault(it => it.PropertyName == nav.MemberName);
|
||||
var value =new MapperSql() { Sql = joinInfo.ShortName + "." + columnInfo.DbColumnName };
|
||||
|
||||
if (isSetTempData)
|
||||
{
|
||||
baseParameter.CommonTempData = value;
|
||||
@ -87,19 +97,19 @@ namespace SqlSugar
|
||||
AppendValue(parameter, isLeft, value);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DefaultOneToOne(parameter, baseParameter, isLeft, isSetTempData, nav);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DefaultOneToOne(parameter, baseParameter, isLeft, isSetTempData, nav);
|
||||
}
|
||||
}
|
||||
else if (navN.IsNavgate(expression))
|
||||
{
|
||||
var value = navN.GetMemberSql();
|
||||
SetNavigateResult();
|
||||
this.Context.SingleTableNameSubqueryShortName = navN.shorName;
|
||||
if (isSetTempData)
|
||||
{
|
||||
baseParameter.CommonTempData = value;
|
||||
}
|
||||
else
|
||||
{
|
||||
AppendValue(parameter, isLeft, value);
|
||||
}
|
||||
DefaultOneToOneN(parameter, baseParameter, isLeft, isSetTempData, navN);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -116,6 +126,36 @@ namespace SqlSugar
|
||||
}
|
||||
}
|
||||
|
||||
private void DefaultOneToOneN(ExpressionParameter parameter, ExpressionParameter baseParameter, bool? isLeft, bool isSetTempData, OneToOneNavgateExpressionN navN)
|
||||
{
|
||||
var value = navN.GetMemberSql();
|
||||
SetNavigateResult();
|
||||
this.Context.SingleTableNameSubqueryShortName = navN.shorName;
|
||||
if (isSetTempData)
|
||||
{
|
||||
baseParameter.CommonTempData = value;
|
||||
}
|
||||
else
|
||||
{
|
||||
AppendValue(parameter, isLeft, value);
|
||||
}
|
||||
}
|
||||
|
||||
private void DefaultOneToOne(ExpressionParameter parameter, ExpressionParameter baseParameter, bool? isLeft, bool isSetTempData, OneToOneNavgateExpression nav)
|
||||
{
|
||||
var value = nav.GetSql();
|
||||
SetNavigateResult();
|
||||
this.Context.SingleTableNameSubqueryShortName = nav.ShorName;
|
||||
if (isSetTempData)
|
||||
{
|
||||
baseParameter.CommonTempData = value;
|
||||
}
|
||||
else
|
||||
{
|
||||
AppendValue(parameter, isLeft, value);
|
||||
}
|
||||
}
|
||||
|
||||
private static bool IsConvertMemberName(MemberExpression expression)
|
||||
{
|
||||
return expression.Expression is UnaryExpression && (expression.Expression as UnaryExpression).Operand is ParameterExpression;
|
||||
|
@ -10,11 +10,11 @@ namespace SqlSugar
|
||||
internal class OneToOneNavgateExpression
|
||||
{
|
||||
private SqlSugarProvider context;
|
||||
private EntityInfo EntityInfo;
|
||||
private EntityInfo ProPertyEntity;
|
||||
internal EntityInfo EntityInfo;
|
||||
internal EntityInfo ProPertyEntity;
|
||||
private Navigate Navigat;
|
||||
public string ShorName;
|
||||
private string MemberName;
|
||||
internal string MemberName;
|
||||
public OneToOneNavgateExpression(SqlSugarProvider context)
|
||||
{
|
||||
this.context = context;
|
||||
|
@ -19,6 +19,7 @@ namespace SqlSugar
|
||||
ISugarQueryable<T> AS<T2>(string tableName);
|
||||
ISugarQueryable<T> AS(string tableName);
|
||||
ISugarQueryable<T> With(string withString);
|
||||
ISugarQueryable<T> IncludeLeftJoin(Expression<Func<T, object>> LeftObject);
|
||||
ISugarQueryable<T, T2> LeftJoin<T2>(ISugarQueryable<T2> joinQueryable, Expression<Func<T, T2, bool>> joinExpression);
|
||||
ISugarQueryable<T, T2> InnerJoin<T2>(ISugarQueryable<T2> joinQueryable, Expression<Func<T, T2, bool>> joinExpression);
|
||||
ISugarQueryable<T, T2> RightJoin<T2>(ISugarQueryable<T2> joinQueryable, Expression<Func<T, T2, bool>> joinExpression);
|
||||
|
Loading…
Reference in New Issue
Block a user