- 修复 ISelect Sum/First 子查询时,若子查询实体类与主查询一样时,导致的 bug;

This commit is contained in:
28810 2019-08-12 16:53:13 +08:00
parent ecda6d8f49
commit 6d9b6b6670
4 changed files with 14 additions and 8 deletions

View File

@ -884,12 +884,12 @@ namespace FreeSql.Tests.MySqlConnector
var subquery = select.ToSql(a => new var subquery = select.ToSql(a => new
{ {
all = a, all = a,
count = select.Sum(b => b.Id) count = (long)select.Sum(b => b.Id)
}); });
var subqueryList = select.ToList(a => new var subqueryList = select.ToList(a => new
{ {
all = a, all = a,
count = select.Sum(b => b.Id) count = (long)select.Sum(b => b.Id)
}); });
} }
[Fact] [Fact]

View File

@ -874,12 +874,12 @@ namespace FreeSql.Tests.MySql
var subquery = select.ToSql(a => new var subquery = select.ToSql(a => new
{ {
all = a, all = a,
count = select.Sum(b => b.Id) count = (long)select.Sum(b => b.Id)
}); });
var subqueryList = select.ToList(a => new var subqueryList = select.ToList(a => new
{ {
all = a, all = a,
count = select.Sum(b => b.Id) count = (long)select.Sum(b => b.Id)
}); });
} }
[Fact] [Fact]

View File

@ -832,12 +832,12 @@ namespace FreeSql.Tests.PostgreSQL
var subquery = select.ToSql(a => new var subquery = select.ToSql(a => new
{ {
all = a, all = a,
count = select.Sum(b => b.Id) count = (long)select.Sum(b => b.Id)
}); });
var subqueryList = select.ToList(a => new var subqueryList = select.ToList(a => new
{ {
all = a, all = a,
count = select.Sum(b => b.Id) count = (long)select.Sum(b => b.Id)
}); });
} }
[Fact] [Fact]

View File

@ -817,12 +817,18 @@ namespace FreeSql.Internal
case "Min": case "Min":
case "Max": case "Max":
case "Avg": case "Avg":
var sqlSum = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { $"{exp3.Method.Name.ToLower()}({ExpressionLambdaToSql(exp3.Arguments.FirstOrDefault(), tsc)})" })?.ToString(); var tscClone1 = tsc.CloneDisableDiyParse();
tscClone1.isDisableDiyParse = false;
tscClone1._tables = fsqltables;
var sqlSum = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { $"{exp3.Method.Name.ToLower()}({ExpressionLambdaToSql(exp3.Arguments.FirstOrDefault(), tscClone1)})" })?.ToString();
if (string.IsNullOrEmpty(sqlSum) == false) if (string.IsNullOrEmpty(sqlSum) == false)
return $"({sqlSum.Replace("\r\n", "\r\n\t")})"; return $"({sqlSum.Replace("\r\n", "\r\n\t")})";
break; break;
case "First": case "First":
var sqlFirst = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { ExpressionLambdaToSql(exp3.Arguments.FirstOrDefault(), tsc) })?.ToString(); var tscClone2 = tsc.CloneDisableDiyParse();
tscClone2.isDisableDiyParse = false;
tscClone2._tables = fsqltables;
var sqlFirst = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { ExpressionLambdaToSql(exp3.Arguments.FirstOrDefault(), tscClone2) })?.ToString();
if (string.IsNullOrEmpty(sqlFirst) == false) if (string.IsNullOrEmpty(sqlFirst) == false)
return $"({sqlFirst.Replace("\r\n", "\r\n\t")})"; return $"({sqlFirst.Replace("\r\n", "\r\n\t")})";
break; break;