mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 10:42:52 +08:00
- 修复 ISelect .From 方法之前使用 .Include 方法,导致生成的多表 JOIN 位置错误的 bug;#128
This commit is contained in:
parent
08bd86ae40
commit
f2cb3bd5fe
@ -199,6 +199,11 @@
|
||||
创建日期
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Tests.UnitTest2.Comment.Text">
|
||||
<summary>
|
||||
回复的文本内容
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:SaleIDO.Entity.Storeage.AdjustPriceOrder">
|
||||
<summary>
|
||||
调价单
|
||||
|
@ -137,10 +137,43 @@ namespace FreeSql.Tests
|
||||
{
|
||||
}
|
||||
|
||||
public class LinUser
|
||||
{
|
||||
public long id { get; set; }
|
||||
}
|
||||
|
||||
public class Comment
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
/// <summary>
|
||||
/// 回复的文本内容
|
||||
/// </summary>
|
||||
public string Text { get; set; }
|
||||
[Navigate("CreateUserId")]
|
||||
public LinUser UserInfo { get; set; }
|
||||
public long? CreateUserId { get; set; }
|
||||
}
|
||||
|
||||
public class UserLike
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public Guid SubjectId { get; set; }
|
||||
public long? CreateUserId { get; set; }
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Test02()
|
||||
{
|
||||
|
||||
var comments1 = g.mysql.Select<Comment, UserLike>()
|
||||
.LeftJoin((a, b) => a.Id == b.SubjectId)
|
||||
.ToList((a, b) => new { comment = a, b.SubjectId, user = a.UserInfo });
|
||||
|
||||
var comments2 = g.mysql.Select<Comment>()
|
||||
.Include(r => r.UserInfo)
|
||||
.From<UserLike>((z, b) => z.LeftJoin(u => u.Id == b.SubjectId))
|
||||
.ToList((a, b) => new { comment = a, b.SubjectId, user = a.UserInfo });
|
||||
|
||||
g.sqlite.Delete<SysModulePermission>().Where("1=1").ExecuteAffrows();
|
||||
g.sqlite.Delete<SysModuleButton>().Where("1=1").ExecuteAffrows();
|
||||
g.sqlite.Delete<SysModule>().Where("1=1").ExecuteAffrows();
|
||||
|
@ -71,20 +71,28 @@ namespace FreeSql.Internal.CommonProvider
|
||||
toType.GetField("_tables", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(to, new List<SelectTableInfo>(from._tables.ToArray()));
|
||||
else
|
||||
{
|
||||
var findedIndexs = new List<int>();
|
||||
var _multiTables = toType.GetField("_tables", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(to) as List<SelectTableInfo>;
|
||||
_multiTables[0] = from._tables[0];
|
||||
for (var a = 1; a < lambParms.Count; a++)
|
||||
{
|
||||
var tb = from._tables.Where(b => b.Alias == lambParms[a].Name && b.Table.Type == lambParms[a].Type).FirstOrDefault();
|
||||
if (tb != null) _multiTables[a] = tb;
|
||||
var tbIndex = from._tables.FindIndex(b => b.Alias == lambParms[a].Name && b.Table.Type == lambParms[a].Type); ;
|
||||
if (tbIndex != -1)
|
||||
{
|
||||
findedIndexs.Add(tbIndex);
|
||||
_multiTables[a] = from._tables[tbIndex];
|
||||
}
|
||||
else
|
||||
{
|
||||
_multiTables[a].Alias = lambParms[a].Name;
|
||||
_multiTables[a].Parameter = lambParms[a];
|
||||
}
|
||||
}
|
||||
if (_multiTables.Count < from._tables.Count)
|
||||
_multiTables.AddRange(from._tables.GetRange(_multiTables.Count, from._tables.Count - _multiTables.Count));
|
||||
for (var a = 1; a < from._tables.Count; a++)
|
||||
{
|
||||
if (findedIndexs.Contains(a)) continue;
|
||||
_multiTables.Add(from._tables[a]);
|
||||
}
|
||||
}
|
||||
toType.GetField("_tableRules", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(to, from._tableRules);
|
||||
toType.GetField("_aliasRule", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(to, from._aliasRule);
|
||||
|
Loading…
x
Reference in New Issue
Block a user