diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml
index 26522f10..537315e2 100644
--- a/FreeSql.DbContext/FreeSql.DbContext.xml
+++ b/FreeSql.DbContext/FreeSql.DbContext.xml
@@ -800,14 +800,5 @@
-
-
- 批量注入 Repository,可以参考代码自行调整
-
-
-
-
-
-
diff --git a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectWithTempQueryTest.cs b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectWithTempQueryTest.cs
index 13faa858..eb3f9792 100644
--- a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectWithTempQueryTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectWithTempQueryTest.cs
@@ -964,6 +964,68 @@ WHERE (a.[rownum] = 1)";
Assert.Equal(list14[2].user.Nickname, "name03");
Assert.Equal(list14[2].userext.UserId, 5);
Assert.Equal(list14[2].userext.Remark, "remark05");
+
+
+ var sql15 = fsql.Select()
+ .WithTempQuery(a => new
+ {
+ user = a,
+ rownum = SqlExt.RowNumber().Over().PartitionBy(a.Nickname).OrderBy(a.Id).ToValue()
+ })
+ .Where(a => a.rownum == 1)
+ .FromQuery(fsql.Select().Where(b => b.UserId > 0)
+ .GroupBy(b => new { b.UserId, b.Remark })
+ .WithTempQuery(b => new { b.Key, sum1 = b.Sum(b.Value.UserId) }))
+ .InnerJoin((a, b) => a.user.Id == b.Key.UserId)
+ .Where((a, b) => a.user.Nickname == "name02" || a.user.Nickname == "name03")
+ .ToSql((a, b) => new
+ {
+ user = a.user,
+ rownum = a.rownum,
+ groupby = b
+ }, FieldAliasOptions.AsProperty);
+ var assertSql15 = @"SELECT a.[Id], a.[Nickname], a.[rownum], b.[UserId], b.[Remark], b.[sum1]
+FROM (
+ SELECT a.[Id], a.[Nickname], row_number() over( partition by a.[Nickname] order by a.[Id]) [rownum]
+ FROM [TwoTablePartitionBy_User] a ) a
+INNER JOIN (
+ SELECT a.[UserId], a.[Remark], sum(a.[UserId]) [sum1]
+ FROM [TwoTablePartitionBy_UserExt] a
+ WHERE (a.[UserId] > 0)
+ GROUP BY a.[UserId], a.[Remark] ) b ON a.[Id] = b.[UserId]
+WHERE (a.[rownum] = 1) AND ((a.[Nickname] = N'name02' OR a.[Nickname] = N'name03'))";
+ Assert.Equal(sql15, assertSql15);
+ var list15 = fsql.Select()
+ .WithTempQuery(a => new
+ {
+ user = a,
+ rownum = SqlExt.RowNumber().Over().PartitionBy(a.Nickname).OrderBy(a.Id).ToValue()
+ })
+ .Where(a => a.rownum == 1)
+ .FromQuery(fsql.Select().Where(b => b.UserId > 0)
+ .GroupBy(b => new { b.UserId, b.Remark })
+ .WithTempQuery(b => new { b.Key, sum1 = b.Sum(b.Value.UserId) }))
+ .InnerJoin((a, b) => a.user.Id == b.Key.UserId)
+ .Where((a, b) => a.user.Nickname == "name02" || a.user.Nickname == "name03")
+ .ToList((a, b) => new
+ {
+ user = a.user,
+ rownum = a.rownum,
+ groupby = b
+ });
+ Assert.Equal(list15.Count, 2);
+ Assert.Equal("remark04", list15[0].groupby.Key.Remark);
+ Assert.Equal(4, list15[0].groupby.Key.UserId);
+ Assert.Equal(4, list15[0].groupby.sum1);
+ Assert.Equal(1, list15[0].rownum);
+ Assert.Equal(4, list15[0].user.Id);
+ Assert.Equal("name02", list15[0].user.Nickname);
+ Assert.Equal("remark05", list15[1].groupby.Key.Remark);
+ Assert.Equal(5, list15[1].groupby.Key.UserId);
+ Assert.Equal(5, list15[1].groupby.sum1);
+ Assert.Equal(1, list15[1].rownum);
+ Assert.Equal(5, list15[1].user.Id);
+ Assert.Equal("name03", list15[1].user.Nickname);
}
class TwoTablePartitionBy_User
{
diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs
index c4fb4e72..08c5bcf4 100644
--- a/FreeSql/Internal/CommonExpression.cs
+++ b/FreeSql/Internal/CommonExpression.cs
@@ -1683,9 +1683,12 @@ namespace FreeSql.Internal
if (callExp != null) return ExpressionLambdaToSql(callExp, tsc);
if (tsc.diymemexp != null)
{
- var expStackFirst = expStack.First();
+ var expStackFirst = expStack.First() as ParameterExpression;
var bidx = expStackFirst.Type.FullName.StartsWith("FreeSql.ISelectGroupingAggregate`") ? 2 : 1; //.Key .Value
- var diyexpResult = tsc.diymemexp.ParseExp(expStack.Where((a, b) => b >= bidx).ToArray());
+ var diyexpMembers = expStack.Where((a, b) => b >= bidx).ToArray();
+ if (diyexpMembers.Any() == false && tsc.diymemexp != null && tsc.diymemexp is Select0Provider.WithTempQueryParser tempQueryParser && tempQueryParser.GetOutsideSelectTable(expStackFirst) != null)
+ diyexpMembers = expStack.ToArray();
+ var diyexpResult = tsc.diymemexp.ParseExp(diyexpMembers);
if (string.IsNullOrEmpty(diyexpResult) == false) return diyexpResult;
}
var psgpdymes = _subSelectParentDiyMemExps.Value; //解决:分组之后的子查询解析
diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs
index 8fe90a58..d7854b61 100644
--- a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs
+++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs
@@ -218,6 +218,11 @@ namespace FreeSql.Internal.CommonProvider
return $"{ParseExpMatchedTable.Alias}.{insideData.InsideMap.DbNestedField}";
}
var read = insideData.InsideMap;
+ if (members.Length == 1 && members[0] == ParseExpMatchedTable.Parameter)
+ {
+ ParseExpMapResult = read;
+ return $"{ParseExpMatchedTable.Alias}.{read.DbNestedField}";
+ }
for (var a = 0; a < members.Length; a++)
{
read = read.Childs.Where(z => z.CsName == (members[a] as MemberExpression)?.Member.Name).FirstOrDefault();