From 558d154486c3dad50fdf593f288decb8352fa1b8 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Wed, 17 Jul 2019 18:01:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20.From=20=E5=A4=9A=E8=A1=A8?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=88=AB=E5=90=8D=E7=9A=84=E5=8C=B9=E9=85=8D?= =?UTF-8?q?=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.Tests/FreeSql.Tests/UnitTest1.cs | 24 +++++++++++++++++++++++- FreeSql/Internal/CommonExpression.cs | 7 ++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs index c2450eac..0d15f2ee 100644 --- a/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs +++ b/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs @@ -283,6 +283,8 @@ namespace FreeSql.Tests [Navigate("TbId")] public virtual ICollection Builds { get; set; } public Templates Templates { get; set; } + + public TaskBuild Parent { get; set; } } public class SqlFunc @@ -296,7 +298,27 @@ namespace FreeSql.Tests [Fact] public void Test1() { - + var sqksdkfjl = g.sqlite.Select() + .LeftJoin(a => a.Templates.Id2 == a.TemplatesId) + .LeftJoin(a => a.Parent.Id == a.Id) + .LeftJoin(a => a.Parent.Templates.Id2 == a.Parent.TemplatesId) + .ToSql(a => new + { + code1 = a.Templates.Code, + code2 = a.Parent.Templates.Code + }); + + + var sqksdkfjl2223 = g.sqlite.Select().From((s1, tb2, b1, b2) => s1 + .LeftJoin(a => a.Id == tb2.TemplatesId) + .LeftJoin(a => a.TemplatesId == b1.Id2) + .LeftJoin(a => a.TemplatesId == b2.Id2) + ).ToSql((a, tb2, b1, b2) => new + { + code1 = b1.Code, + code2 = b2.Code + }); + var teklksjdg = g.sqlite.Select() .Where(a => true && a.CustomerMember.Group == "xxx") diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index 4a205ec9..fd306228 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -8,6 +8,7 @@ using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; +using System.Text.RegularExpressions; namespace FreeSql.Internal { @@ -341,6 +342,7 @@ namespace FreeSql.Internal return GetBoolString(sql); return sql; } + static ConcurrentDictionary dicRegexAlias = new ConcurrentDictionary(); public void ExpressionJoinLambda(List _tables, SelectTableInfoType tbtype, Expression exp, Func getSelectGroupingMapString) { var tbidx = _tables.Count; @@ -360,7 +362,10 @@ namespace FreeSql.Internal } else { - var find = _tables.Where((a, c) => c > 0 && (a.Type == tbtype || a.Type == SelectTableInfoType.From) && string.IsNullOrEmpty(a.On) && sql.Contains(a.Alias + ".")).LastOrDefault(); + var find = _tables.Where((a, c) => c > 0 && + (a.Type == tbtype || a.Type == SelectTableInfoType.From) && + string.IsNullOrEmpty(a.On) && + dicRegexAlias.GetOrAdd(a.Alias, alias => new Regex($@"\b{alias}\.", RegexOptions.Compiled)).IsMatch(sql)).LastOrDefault(); if (find != null) { find.Type = tbtype;