mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 18:52:50 +08:00
- 修复 ISelect.WhereCascade 当内部使用 (a as BaseEntity).TenantId 时报错的 bug;
This commit is contained in:
parent
ea79084de3
commit
ecda6d8f49
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user