mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 10:42:52 +08:00
fix FromQuery 别名 bug
This commit is contained in:
parent
cb842706ec
commit
ce1fabd712
@ -733,15 +733,6 @@
|
||||
<param name="modelBuilder"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSqlDbContextExtensions.ApplyConfigurationsFromAssembly(FreeSql.ICodeFirst,System.Reflection.Assembly,System.Func{System.Type,System.Boolean})">
|
||||
<summary>
|
||||
根据Assembly扫描所有继承IEntityTypeConfiguration<T>的配置类
|
||||
</summary>
|
||||
<param name="codeFirst"></param>
|
||||
<param name="assembly"></param>
|
||||
<param name="predicate"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSqlDbContextExtensions.CreateDbContext(IFreeSql)">
|
||||
<summary>
|
||||
创建普通数据上下文档对象
|
||||
|
@ -903,6 +903,67 @@ LEFT JOIN (
|
||||
WHERE (a.[Id] > 0 AND b.[UserId] > 0)
|
||||
GROUP BY a.[Nickname]";
|
||||
Assert.Equal(sql13, assertSql13);
|
||||
|
||||
|
||||
var sql14 = fsql.Select<TwoTablePartitionBy_User>()
|
||||
.Where(a => a.Id > 0)
|
||||
.WithTempQuery(a => new
|
||||
{
|
||||
item = a,
|
||||
rownum = SqlExt.RowNumber().Over().PartitionBy(a.Nickname).OrderBy(a.Id).ToValue()
|
||||
})
|
||||
.Where(a => a.rownum == 1)
|
||||
.FromQuery(fsql.Select<TwoTablePartitionBy_UserExt>().Where(b => b.UserId > 0))
|
||||
.InnerJoin((a, b) => a.item.Id == b.UserId)
|
||||
.ToSql((a, b) => new
|
||||
{
|
||||
user = a.item,
|
||||
rownum = a.rownum,
|
||||
userext = b
|
||||
});
|
||||
var assertSql14 = @"SELECT a.[Id] as1, a.[Nickname] as2, a.[rownum] as3, b.[UserId] as4, b.[Remark] as5
|
||||
FROM (
|
||||
SELECT a.[Id], a.[Nickname], row_number() over( partition by a.[Nickname] order by a.[Id]) [rownum]
|
||||
FROM [TwoTablePartitionBy_User] a
|
||||
WHERE (a.[Id] > 0) ) a
|
||||
INNER JOIN (
|
||||
SELECT a.[UserId], a.[Remark]
|
||||
FROM [TwoTablePartitionBy_UserExt] a
|
||||
WHERE (a.[UserId] > 0)) b ON a.[Id] = b.[UserId]
|
||||
WHERE (a.[rownum] = 1)";
|
||||
Assert.Equal(sql14, assertSql14);
|
||||
var list14 = fsql.Select<TwoTablePartitionBy_User>()
|
||||
.Where(a => a.Id > 0)
|
||||
.WithTempQuery(a => new
|
||||
{
|
||||
item = a,
|
||||
rownum = SqlExt.RowNumber().Over().PartitionBy(a.Nickname).OrderBy(a.Id).ToValue()
|
||||
})
|
||||
.Where(a => a.rownum == 1)
|
||||
.FromQuery(fsql.Select<TwoTablePartitionBy_UserExt>().Where(b => b.UserId > 0))
|
||||
.InnerJoin((a, b) => a.item.Id == b.UserId)
|
||||
.ToList((a, b) => new
|
||||
{
|
||||
user = a.item,
|
||||
rownum = a.rownum,
|
||||
userext = b
|
||||
});
|
||||
Assert.Equal(list14.Count, 3);
|
||||
Assert.Equal(list14[0].rownum, 1);
|
||||
Assert.Equal(list14[0].user.Id, 1);
|
||||
Assert.Equal(list14[0].user.Nickname, "name01");
|
||||
Assert.Equal(list14[0].userext.UserId, 1);
|
||||
Assert.Equal(list14[0].userext.Remark, "remark01");
|
||||
Assert.Equal(list14[1].rownum, 1);
|
||||
Assert.Equal(list14[1].user.Id, 4);
|
||||
Assert.Equal(list14[1].user.Nickname, "name02");
|
||||
Assert.Equal(list14[1].userext.UserId, 4);
|
||||
Assert.Equal(list14[1].userext.Remark, "remark04");
|
||||
Assert.Equal(list14[2].rownum, 1);
|
||||
Assert.Equal(list14[2].user.Id, 5);
|
||||
Assert.Equal(list14[2].user.Nickname, "name03");
|
||||
Assert.Equal(list14[2].userext.UserId, 5);
|
||||
Assert.Equal(list14[2].userext.Remark, "remark05");
|
||||
}
|
||||
class TwoTablePartitionBy_User
|
||||
{
|
||||
|
@ -203,6 +203,8 @@ namespace FreeSql.Internal.CommonProvider
|
||||
{
|
||||
ParseExpMapResult = null;
|
||||
ParseExpMatchedTable = GetOutsideSelectTable(members.FirstOrDefault()?.GetParameter());
|
||||
if (ParseExpMatchedTable == null) return null;
|
||||
|
||||
var insideIndex = _outsideTable.FindIndex(a => a == ParseExpMatchedTable);
|
||||
if (insideIndex == -1)
|
||||
{
|
||||
@ -226,14 +228,14 @@ namespace FreeSql.Internal.CommonProvider
|
||||
}
|
||||
public SelectTableInfo GetOutsideSelectTable(ParameterExpression parameterExp)
|
||||
{
|
||||
if (parameterExp == null) return _outsideTable[0];
|
||||
if (parameterExp == null) return null;
|
||||
var find = _outsideTable.Where(a => a.Parameter == parameterExp).ToArray();
|
||||
if (find.Length == 1) return find[0];
|
||||
find = _outsideTable.Where(a => a.Table.Type == parameterExp.Type).ToArray();
|
||||
if (find.Length == 1) return find[0];
|
||||
find = _outsideTable.Where(a => a.Alias == parameterExp.Name).ToArray();
|
||||
if (find.Length == 1) return find[0];
|
||||
return _outsideTable[0];
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user