Skip to content

Commit a45cfff

Browse files
2881028810
authored andcommitted
- 修复 ToList 父子导航可能匹配不正确的 bug;
1 parent f0bd6cc commit a45cfff

File tree

4 files changed

+277
-1
lines changed

4 files changed

+277
-1
lines changed

FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml

Lines changed: 50 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

FreeSql.Tests/FreeSql.Tests/UnitTest3.cs

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,103 @@ public TestDbContext(IFreeSql orm) : base(orm, null)
4444
public DbSet<Author23> Authors { get; set; }
4545
}
4646

47+
/// <summary>
48+
/// 父级
49+
/// </summary>
50+
public class BaseModel
51+
{
52+
[Column(IsPrimary = true)]
53+
public string ID { get; set; }
54+
55+
/// <summary>
56+
/// 创建人
57+
/// </summary>
58+
public string UserID { get; set; } = "Admin";
59+
60+
/// <summary>
61+
/// 创建时间
62+
/// </summary>
63+
[Column(ServerTime = DateTimeKind.Utc)]
64+
public DateTime CreateTime { get; set; }
65+
66+
/// <summary>
67+
/// 备注
68+
/// </summary>
69+
public string Description { get; set; }
70+
}
71+
public class Menu : BaseModel
72+
{
73+
public string SubNameID { get; set; }
74+
75+
/// <summary>
76+
/// 菜单名称
77+
/// </summary>
78+
public string Name { get; set; }
79+
80+
/// <summary>
81+
/// 英文名称
82+
/// </summary>
83+
public string EnName { get; set; }
84+
85+
/// <summary>
86+
/// 链接地址
87+
/// </summary>
88+
public string Url { get; set; }
89+
90+
/// <summary>
91+
/// 父级菜单 一级为 0
92+
/// </summary>
93+
public string ParentID { get; set; }
94+
95+
/// <summary>
96+
/// 按钮操作 逗号分隔
97+
/// </summary>
98+
public string OperationIds { get; set; }
99+
100+
/// <summary>
101+
/// 导航属性
102+
/// </summary>
103+
public virtual Menu Parent { get; set; }
104+
105+
106+
[Column(IsIgnore = true)]
107+
public string OperationNames { get; set; }
108+
109+
[Column(IsIgnore = true)]
110+
public string SystemName { get; set; }
111+
112+
}
113+
class SubSystem
114+
{
115+
public string Id { get; set; }
116+
public string Name { get; set; }
117+
}
118+
47119
[Fact]
48120
public void Test03()
49121
{
122+
var subSyetemId = "xxx";
123+
var list = g.sqlite.Select<Menu, SubSystem>()
124+
.LeftJoin((a,b) => a.SubNameID == b.Id)
125+
.WhereIf(!string.IsNullOrEmpty(subSyetemId), (a, s) => a.SubNameID == subSyetemId)
126+
.ToList((a, s) => new Menu
127+
{
128+
ID = a.ID,
129+
SystemName = s.Name,
130+
SubNameID = s.Id,
131+
CreateTime = a.CreateTime,
132+
Description = a.Description,
133+
EnName = a.EnName,
134+
Name = a.Name,
135+
OperationIds = a.OperationIds,
136+
Parent = a.Parent,
137+
ParentID = a.ParentID,
138+
Url = a.Url,
139+
UserID = a.UserID
140+
});
141+
142+
143+
50144
var context = new TestDbContext(g.sqlite);
51145

52146
var sql = context.Songs

FreeSql/FreeSql.xml

Lines changed: 131 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

FreeSql/Internal/CommonExpression.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1140,7 +1140,8 @@ public string ExpressionLambdaToSql(Expression exp, ExpTSC tsc)
11401140
if (tsc.style == ExpressionStyle.SelectColumns)
11411141
{
11421142
finds = tsc._tables.Where(a => a.Table.Type == tbtmp.Type && a.Alias == alias).ToArray();
1143-
if (finds.Length != 1) finds = tsc._tables.Where(a => a.Table.Type == tbtmp.Type).ToArray();
1143+
if (finds.Any() == false && alias.Contains("__") == false)
1144+
finds = tsc._tables.Where(a => a.Table.Type == tbtmp.Type).ToArray();
11441145
if (finds.Any()) finds = new[] { finds.First() };
11451146
}
11461147
if (finds.Length != 1 && isa && parmExp != null)

0 commit comments

Comments
 (0)