diff --git a/FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml b/FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml
index b44b569a..21a0a7ed 100644
--- a/FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml
+++ b/FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml
@@ -199,6 +199,11 @@
创建日期
+
+
+ 回复的文本内容
+
+
调价单
diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs
index 5234ee72..ba939607 100644
--- a/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs
+++ b/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs
@@ -137,10 +137,43 @@ namespace FreeSql.Tests
{
}
+ public class LinUser
+ {
+ public long id { get; set; }
+ }
+
+ public class Comment
+ {
+ public Guid Id { get; set; }
+ ///
+ /// 回复的文本内容
+ ///
+ 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()
+ .LeftJoin((a, b) => a.Id == b.SubjectId)
+ .ToList((a, b) => new { comment = a, b.SubjectId, user = a.UserInfo });
+
+ var comments2 = g.mysql.Select()
+ .Include(r => r.UserInfo)
+ .From((z, b) => z.LeftJoin(u => u.Id == b.SubjectId))
+ .ToList((a, b) => new { comment = a, b.SubjectId, user = a.UserInfo });
+
g.sqlite.Delete().Where("1=1").ExecuteAffrows();
g.sqlite.Delete().Where("1=1").ExecuteAffrows();
g.sqlite.Delete().Where("1=1").ExecuteAffrows();
diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs
index 365de89d..4859985b 100644
--- a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs
+++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs
@@ -71,20 +71,28 @@ namespace FreeSql.Internal.CommonProvider
toType.GetField("_tables", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(to, new List(from._tables.ToArray()));
else
{
+ var findedIndexs = new List();
var _multiTables = toType.GetField("_tables", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(to) as List;
_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);