mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 17:20:49 +08:00 
			
		
		
		
	- 修复 ISelect.WhereCascade 当内部使用 (a as BaseEntity).TenantId 时报错的 bug;
This commit is contained in:
		@@ -341,9 +341,10 @@ namespace FreeSql.Tests
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void Test1()
 | 
			
		||||
        {
 | 
			
		||||
            g.oracle.Select<Templates, TaskBuild>()
 | 
			
		||||
            var xxxkdkd = g.oracle.Select<Templates, TaskBuild>()
 | 
			
		||||
                .InnerJoin((a,b) => true)
 | 
			
		||||
                .Where((a,b) => (DateTime.Now - a.EditTime).TotalMinutes > 100)
 | 
			
		||||
                .OrderBy((a,b) => g.oracle.Select<Templates>().Where(c => b.Id == c.Id2).Count())
 | 
			
		||||
                .ToSql();
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -708,6 +708,8 @@ namespace FreeSql.Internal
 | 
			
		||||
                                        }));
 | 
			
		||||
                                        var parm123Tb = _common.GetTableByEntity(asSelectParentExp.Type);
 | 
			
		||||
                                        var parm123Ref = parm123Tb.GetTableRef(asSelectParentExp1.Member.Name, true);
 | 
			
		||||
                                        if (parm123Ref != null)
 | 
			
		||||
                                        {
 | 
			
		||||
                                            var fsqlWhereParam = fsqltables.First().Parameter; //Expression.Parameter(asSelectEntityType);
 | 
			
		||||
                                            Expression fsqlWhereExp = null;
 | 
			
		||||
                                            if (parm123Ref.RefType == TableRefType.ManyToMany)
 | 
			
		||||
@@ -796,6 +798,7 @@ namespace FreeSql.Internal
 | 
			
		||||
                                            }
 | 
			
		||||
                                            fsqlWhere.Invoke(fsql, new object[] { Expression.Lambda(fsqlWhereExp, fsqlWhereParam) });
 | 
			
		||||
                                        }
 | 
			
		||||
                                    }
 | 
			
		||||
                                    asSelectBefores.Clear();
 | 
			
		||||
 | 
			
		||||
                                    switch (exp3.Method.Name)
 | 
			
		||||
@@ -1174,7 +1177,8 @@ namespace FreeSql.Internal
 | 
			
		||||
            if (_whereCascadeExpression.Any())
 | 
			
		||||
            {
 | 
			
		||||
                var newParameter = Expression.Parameter(tb.Table.Type, "c");
 | 
			
		||||
                Expression newExp = null;
 | 
			
		||||
                var sb = new StringBuilder();
 | 
			
		||||
                var isEmpty = true;
 | 
			
		||||
 | 
			
		||||
                foreach (var fl in _whereCascadeExpression)
 | 
			
		||||
                {
 | 
			
		||||
@@ -1184,9 +1188,13 @@ namespace FreeSql.Internal
 | 
			
		||||
                    var visitor = new NewExpressionVisitor(newParameter, fl.Parameters.FirstOrDefault());
 | 
			
		||||
                    try
 | 
			
		||||
                    {
 | 
			
		||||
                        var andExp = visitor.Replace(fl.Body);
 | 
			
		||||
                        if (newExp == null) newExp = andExp;
 | 
			
		||||
                        else newExp = Expression.AndAlso(newExp, andExp);
 | 
			
		||||
                        var expExp = visitor.Replace(fl.Body);
 | 
			
		||||
                        var whereSql = ExpressionLambdaToSql(expExp, new ExpTSC { _tables = null, _selectColumnMap = null, getSelectGroupingMapString = null, tbtype = SelectTableInfoType.From, isQuoteName = true, isDisableDiyParse = false, style = ExpressionStyle.Where, currentTable = tb.Table, alias001 = tb.Alias });
 | 
			
		||||
                        if (isEmpty == false)
 | 
			
		||||
                            sb.Append(" AND ");
 | 
			
		||||
                        else
 | 
			
		||||
                            isEmpty = false;
 | 
			
		||||
                        sb.Append("(").Append(whereSql).Append(")");
 | 
			
		||||
                    }
 | 
			
		||||
                    catch
 | 
			
		||||
                    {
 | 
			
		||||
@@ -1195,8 +1203,8 @@ namespace FreeSql.Internal
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (newExp != null)
 | 
			
		||||
                    return ExpressionLambdaToSql(newExp, new ExpTSC { _tables = null, _selectColumnMap = null, getSelectGroupingMapString = null, tbtype = SelectTableInfoType.From, isQuoteName = true, isDisableDiyParse = false, style = ExpressionStyle.Where, currentTable = tb.Table, alias001 = tb.Alias });
 | 
			
		||||
                if (isEmpty == false)
 | 
			
		||||
                    return sb.ToString();
 | 
			
		||||
            }
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user