mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 10:42:52 +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]
|
[Fact]
|
||||||
public void Test1()
|
public void Test1()
|
||||||
{
|
{
|
||||||
g.oracle.Select<Templates, TaskBuild>()
|
var xxxkdkd = g.oracle.Select<Templates, TaskBuild>()
|
||||||
.InnerJoin((a,b) => true)
|
.InnerJoin((a,b) => true)
|
||||||
.Where((a,b) => (DateTime.Now - a.EditTime).TotalMinutes > 100)
|
.Where((a,b) => (DateTime.Now - a.EditTime).TotalMinutes > 100)
|
||||||
|
.OrderBy((a,b) => g.oracle.Select<Templates>().Where(c => b.Id == c.Id2).Count())
|
||||||
.ToSql();
|
.ToSql();
|
||||||
|
|
||||||
|
|
||||||
|
@ -708,6 +708,8 @@ namespace FreeSql.Internal
|
|||||||
}));
|
}));
|
||||||
var parm123Tb = _common.GetTableByEntity(asSelectParentExp.Type);
|
var parm123Tb = _common.GetTableByEntity(asSelectParentExp.Type);
|
||||||
var parm123Ref = parm123Tb.GetTableRef(asSelectParentExp1.Member.Name, true);
|
var parm123Ref = parm123Tb.GetTableRef(asSelectParentExp1.Member.Name, true);
|
||||||
|
if (parm123Ref != null)
|
||||||
|
{
|
||||||
var fsqlWhereParam = fsqltables.First().Parameter; //Expression.Parameter(asSelectEntityType);
|
var fsqlWhereParam = fsqltables.First().Parameter; //Expression.Parameter(asSelectEntityType);
|
||||||
Expression fsqlWhereExp = null;
|
Expression fsqlWhereExp = null;
|
||||||
if (parm123Ref.RefType == TableRefType.ManyToMany)
|
if (parm123Ref.RefType == TableRefType.ManyToMany)
|
||||||
@ -796,6 +798,7 @@ namespace FreeSql.Internal
|
|||||||
}
|
}
|
||||||
fsqlWhere.Invoke(fsql, new object[] { Expression.Lambda(fsqlWhereExp, fsqlWhereParam) });
|
fsqlWhere.Invoke(fsql, new object[] { Expression.Lambda(fsqlWhereExp, fsqlWhereParam) });
|
||||||
}
|
}
|
||||||
|
}
|
||||||
asSelectBefores.Clear();
|
asSelectBefores.Clear();
|
||||||
|
|
||||||
switch (exp3.Method.Name)
|
switch (exp3.Method.Name)
|
||||||
@ -1174,7 +1177,8 @@ namespace FreeSql.Internal
|
|||||||
if (_whereCascadeExpression.Any())
|
if (_whereCascadeExpression.Any())
|
||||||
{
|
{
|
||||||
var newParameter = Expression.Parameter(tb.Table.Type, "c");
|
var newParameter = Expression.Parameter(tb.Table.Type, "c");
|
||||||
Expression newExp = null;
|
var sb = new StringBuilder();
|
||||||
|
var isEmpty = true;
|
||||||
|
|
||||||
foreach (var fl in _whereCascadeExpression)
|
foreach (var fl in _whereCascadeExpression)
|
||||||
{
|
{
|
||||||
@ -1184,9 +1188,13 @@ namespace FreeSql.Internal
|
|||||||
var visitor = new NewExpressionVisitor(newParameter, fl.Parameters.FirstOrDefault());
|
var visitor = new NewExpressionVisitor(newParameter, fl.Parameters.FirstOrDefault());
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var andExp = visitor.Replace(fl.Body);
|
var expExp = visitor.Replace(fl.Body);
|
||||||
if (newExp == null) newExp = andExp;
|
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 });
|
||||||
else newExp = Expression.AndAlso(newExp, andExp);
|
if (isEmpty == false)
|
||||||
|
sb.Append(" AND ");
|
||||||
|
else
|
||||||
|
isEmpty = false;
|
||||||
|
sb.Append("(").Append(whereSql).Append(")");
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
@ -1195,8 +1203,8 @@ namespace FreeSql.Internal
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newExp != null)
|
if (isEmpty == false)
|
||||||
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 });
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user