mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
fix FromQuery 别名 bug
This commit is contained in:
parent
cb842706ec
commit
ce1fabd712
@ -733,15 +733,6 @@
|
|||||||
<param name="modelBuilder"></param>
|
<param name="modelBuilder"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</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)">
|
<member name="M:FreeSqlDbContextExtensions.CreateDbContext(IFreeSql)">
|
||||||
<summary>
|
<summary>
|
||||||
创建普通数据上下文档对象
|
创建普通数据上下文档对象
|
||||||
|
@ -903,6 +903,67 @@ LEFT JOIN (
|
|||||||
WHERE (a.[Id] > 0 AND b.[UserId] > 0)
|
WHERE (a.[Id] > 0 AND b.[UserId] > 0)
|
||||||
GROUP BY a.[Nickname]";
|
GROUP BY a.[Nickname]";
|
||||||
Assert.Equal(sql13, assertSql13);
|
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
|
class TwoTablePartitionBy_User
|
||||||
{
|
{
|
||||||
|
@ -203,6 +203,8 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
{
|
{
|
||||||
ParseExpMapResult = null;
|
ParseExpMapResult = null;
|
||||||
ParseExpMatchedTable = GetOutsideSelectTable(members.FirstOrDefault()?.GetParameter());
|
ParseExpMatchedTable = GetOutsideSelectTable(members.FirstOrDefault()?.GetParameter());
|
||||||
|
if (ParseExpMatchedTable == null) return null;
|
||||||
|
|
||||||
var insideIndex = _outsideTable.FindIndex(a => a == ParseExpMatchedTable);
|
var insideIndex = _outsideTable.FindIndex(a => a == ParseExpMatchedTable);
|
||||||
if (insideIndex == -1)
|
if (insideIndex == -1)
|
||||||
{
|
{
|
||||||
@ -226,14 +228,14 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
}
|
}
|
||||||
public SelectTableInfo GetOutsideSelectTable(ParameterExpression parameterExp)
|
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();
|
var find = _outsideTable.Where(a => a.Parameter == parameterExp).ToArray();
|
||||||
if (find.Length == 1) return find[0];
|
if (find.Length == 1) return find[0];
|
||||||
find = _outsideTable.Where(a => a.Table.Type == parameterExp.Type).ToArray();
|
find = _outsideTable.Where(a => a.Table.Type == parameterExp.Type).ToArray();
|
||||||
if (find.Length == 1) return find[0];
|
if (find.Length == 1) return find[0];
|
||||||
find = _outsideTable.Where(a => a.Alias == parameterExp.Name).ToArray();
|
find = _outsideTable.Where(a => a.Alias == parameterExp.Name).ToArray();
|
||||||
if (find.Length == 1) return find[0];
|
if (find.Length == 1) return find[0];
|
||||||
return _outsideTable[0];
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user