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>();
|
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)
|
public ISugarQueryable<T, T2> LeftJoin<T2>(ISugarQueryable<T2> joinQueryable, Expression<Func<T, T2, bool>> joinExpression)
|
||||||
{
|
{
|
||||||
this.Context.InitMappingInfo<T2>();
|
this.Context.InitMappingInfo<T2>();
|
||||||
|
@ -246,7 +246,7 @@ namespace SqlSugar
|
|||||||
{
|
{
|
||||||
resolveExpress.PgSqlIsAutoToLower = true;
|
resolveExpress.PgSqlIsAutoToLower = true;
|
||||||
}
|
}
|
||||||
resolveExpress.SugarContext = new ExpressionOutParameter() { Context = this.Context };
|
resolveExpress.SugarContext = new ExpressionOutParameter() { Context = this.Context, QueryBuilder = this } ;
|
||||||
resolveExpress.RootExpression = expression;
|
resolveExpress.RootExpression = expression;
|
||||||
resolveExpress.JoinQueryInfos = Builder.QueryBuilder.JoinQueryInfos;
|
resolveExpress.JoinQueryInfos = Builder.QueryBuilder.JoinQueryInfos;
|
||||||
resolveExpress.IsSingle = IsSingle()&& resolveType!= ResolveExpressType.WhereMultiple;
|
resolveExpress.IsSingle = IsSingle()&& resolveType!= ResolveExpressType.WhereMultiple;
|
||||||
|
@ -6,6 +6,7 @@ using System.Text;
|
|||||||
|
|
||||||
namespace SqlSugar
|
namespace SqlSugar
|
||||||
{
|
{
|
||||||
|
|
||||||
public class JoinQueryInfo
|
public class JoinQueryInfo
|
||||||
{
|
{
|
||||||
public JoinType JoinType { get; set; }
|
public JoinType JoinType { get; set; }
|
||||||
|
@ -9,5 +9,6 @@ namespace SqlSugar
|
|||||||
public class ExpressionOutParameter
|
public class ExpressionOutParameter
|
||||||
{
|
{
|
||||||
public SqlSugarProvider Context { get; set; }
|
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)
|
public static List<ParameterExpression> ExpressionParameters(Expression expression)
|
||||||
{
|
{
|
||||||
List<ParameterExpression> parameters = null;
|
List<ParameterExpression> parameters = null;
|
||||||
|
@ -3,6 +3,8 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
namespace SqlSugar
|
namespace SqlSugar
|
||||||
{
|
{
|
||||||
public class MemberExpressionResolve : BaseResolve
|
public class MemberExpressionResolve : BaseResolve
|
||||||
@ -75,31 +77,39 @@ namespace SqlSugar
|
|||||||
var navN = new OneToOneNavgateExpressionN(this.Context?.SugarContext?.Context);
|
var navN = new OneToOneNavgateExpressionN(this.Context?.SugarContext?.Context);
|
||||||
if (nav.IsNavgate(expression))
|
if (nav.IsNavgate(expression))
|
||||||
{
|
{
|
||||||
var value = nav.GetSql();
|
if (this.Context?.SugarContext?.QueryBuilder?.JoinQueryInfos != null)
|
||||||
SetNavigateResult();
|
|
||||||
this.Context.SingleTableNameSubqueryShortName = nav.ShorName;
|
|
||||||
if (isSetTempData)
|
|
||||||
{
|
{
|
||||||
baseParameter.CommonTempData = value;
|
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;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AppendValue(parameter, isLeft, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DefaultOneToOne(parameter, baseParameter, isLeft, isSetTempData, nav);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
AppendValue(parameter, isLeft, value);
|
DefaultOneToOne(parameter, baseParameter, isLeft, isSetTempData, nav);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (navN.IsNavgate(expression))
|
else if (navN.IsNavgate(expression))
|
||||||
{
|
{
|
||||||
var value = navN.GetMemberSql();
|
DefaultOneToOneN(parameter, baseParameter, isLeft, isSetTempData, navN);
|
||||||
SetNavigateResult();
|
|
||||||
this.Context.SingleTableNameSubqueryShortName = navN.shorName;
|
|
||||||
if (isSetTempData)
|
|
||||||
{
|
|
||||||
baseParameter.CommonTempData = value;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
AppendValue(parameter, isLeft, value);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
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)
|
private static bool IsConvertMemberName(MemberExpression expression)
|
||||||
{
|
{
|
||||||
return expression.Expression is UnaryExpression && (expression.Expression as UnaryExpression).Operand is ParameterExpression;
|
return expression.Expression is UnaryExpression && (expression.Expression as UnaryExpression).Operand is ParameterExpression;
|
||||||
|
@ -10,11 +10,11 @@ namespace SqlSugar
|
|||||||
internal class OneToOneNavgateExpression
|
internal class OneToOneNavgateExpression
|
||||||
{
|
{
|
||||||
private SqlSugarProvider context;
|
private SqlSugarProvider context;
|
||||||
private EntityInfo EntityInfo;
|
internal EntityInfo EntityInfo;
|
||||||
private EntityInfo ProPertyEntity;
|
internal EntityInfo ProPertyEntity;
|
||||||
private Navigate Navigat;
|
private Navigate Navigat;
|
||||||
public string ShorName;
|
public string ShorName;
|
||||||
private string MemberName;
|
internal string MemberName;
|
||||||
public OneToOneNavgateExpression(SqlSugarProvider context)
|
public OneToOneNavgateExpression(SqlSugarProvider context)
|
||||||
{
|
{
|
||||||
this.context = context;
|
this.context = context;
|
||||||
|
@ -19,6 +19,7 @@ namespace SqlSugar
|
|||||||
ISugarQueryable<T> AS<T2>(string tableName);
|
ISugarQueryable<T> AS<T2>(string tableName);
|
||||||
ISugarQueryable<T> AS(string tableName);
|
ISugarQueryable<T> AS(string tableName);
|
||||||
ISugarQueryable<T> With(string withString);
|
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> 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> 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);
|
ISugarQueryable<T, T2> RightJoin<T2>(ISugarQueryable<T2> joinQueryable, Expression<Func<T, T2, bool>> joinExpression);
|
||||||
|
Loading…
Reference in New Issue
Block a user