Skip to content

Commit 6d9b6b6

Browse files
2881028810
authored andcommitted
- 修复 ISelect Sum/First 子查询时,若子查询实体类与主查询一样时,导致的 bug;
1 parent ecda6d8 commit 6d9b6b6

File tree

4 files changed

+14
-8
lines changed

4 files changed

+14
-8
lines changed

FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlSelectTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -884,12 +884,12 @@ public void Sum()
884884
var subquery = select.ToSql(a => new
885885
{
886886
all = a,
887-
count = select.Sum(b => b.Id)
887+
count = (long)select.Sum(b => b.Id)
888888
});
889889
var subqueryList = select.ToList(a => new
890890
{
891891
all = a,
892-
count = select.Sum(b => b.Id)
892+
count = (long)select.Sum(b => b.Id)
893893
});
894894
}
895895
[Fact]

FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlSelectTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -874,12 +874,12 @@ public void Sum()
874874
var subquery = select.ToSql(a => new
875875
{
876876
all = a,
877-
count = select.Sum(b => b.Id)
877+
count = (long)select.Sum(b => b.Id)
878878
});
879879
var subqueryList = select.ToList(a => new
880880
{
881881
all = a,
882-
count = select.Sum(b => b.Id)
882+
count = (long)select.Sum(b => b.Id)
883883
});
884884
}
885885
[Fact]

FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLSelectTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -832,12 +832,12 @@ public void Sum()
832832
var subquery = select.ToSql(a => new
833833
{
834834
all = a,
835-
count = select.Sum(b => b.Id)
835+
count = (long)select.Sum(b => b.Id)
836836
});
837837
var subqueryList = select.ToList(a => new
838838
{
839839
all = a,
840-
count = select.Sum(b => b.Id)
840+
count = (long)select.Sum(b => b.Id)
841841
});
842842
}
843843
[Fact]

FreeSql/Internal/CommonExpression.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -817,12 +817,18 @@ public string ExpressionLambdaToSql(Expression exp, ExpTSC tsc)
817817
case "Min":
818818
case "Max":
819819
case "Avg":
820-
var sqlSum = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { $"{exp3.Method.Name.ToLower()}({ExpressionLambdaToSql(exp3.Arguments.FirstOrDefault(), tsc)})" })?.ToString();
820+
var tscClone1 = tsc.CloneDisableDiyParse();
821+
tscClone1.isDisableDiyParse = false;
822+
tscClone1._tables = fsqltables;
823+
var sqlSum = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { $"{exp3.Method.Name.ToLower()}({ExpressionLambdaToSql(exp3.Arguments.FirstOrDefault(), tscClone1)})" })?.ToString();
821824
if (string.IsNullOrEmpty(sqlSum) == false)
822825
return $"({sqlSum.Replace("\r\n", "\r\n\t")})";
823826
break;
824827
case "First":
825-
var sqlFirst = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { ExpressionLambdaToSql(exp3.Arguments.FirstOrDefault(), tsc) })?.ToString();
828+
var tscClone2 = tsc.CloneDisableDiyParse();
829+
tscClone2.isDisableDiyParse = false;
830+
tscClone2._tables = fsqltables;
831+
var sqlFirst = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { ExpressionLambdaToSql(exp3.Arguments.FirstOrDefault(), tscClone2) })?.ToString();
826832
if (string.IsNullOrEmpty(sqlFirst) == false)
827833
return $"({sqlFirst.Replace("\r\n", "\r\n\t")})";
828834
break;

0 commit comments

Comments
 (0)