From f2cb3bd5fe7887fb1ac6552333d71e1d2a558c42 Mon Sep 17 00:00:00 2001
From: 28810 <28810@YEXIANGQIN>
Date: Sun, 10 Nov 2019 20:53:39 +0800
Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20ISelect=20.From=20?=
=?UTF-8?q?=E6=96=B9=E6=B3=95=E4=B9=8B=E5=89=8D=E4=BD=BF=E7=94=A8=20.Inclu?=
=?UTF-8?q?de=20=E6=96=B9=E6=B3=95=EF=BC=8C=E5=AF=BC=E8=87=B4=E7=94=9F?=
=?UTF-8?q?=E6=88=90=E7=9A=84=E5=A4=9A=E8=A1=A8=20JOIN=20=E4=BD=8D?=
=?UTF-8?q?=E7=BD=AE=E9=94=99=E8=AF=AF=E7=9A=84=20bug=EF=BC=9B#128?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml | 5 +++
FreeSql.Tests/FreeSql.Tests/UnitTest2.cs | 33 +++++++++++++++++++
.../SelectProvider/Select0Provider.cs | 16 ++++++---
3 files changed, 50 insertions(+), 4 deletions(-)
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);