mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 18:52:50 +08:00
修复 .From 多表查询别名的匹配 bug
This commit is contained in:
parent
a5f524d154
commit
558d154486
@ -283,6 +283,8 @@ namespace FreeSql.Tests
|
||||
[Navigate("TbId")]
|
||||
public virtual ICollection<TaskBuildInfo> Builds { get; set; }
|
||||
public Templates Templates { get; set; }
|
||||
|
||||
public TaskBuild Parent { get; set; }
|
||||
}
|
||||
|
||||
public class SqlFunc
|
||||
@ -296,6 +298,26 @@ namespace FreeSql.Tests
|
||||
[Fact]
|
||||
public void Test1()
|
||||
{
|
||||
var sqksdkfjl = g.sqlite.Select<TaskBuild>()
|
||||
.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<TaskBuild>().From<TaskBuild, Templates, Templates>((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<ZX.Model.CustomerCheckupGroup>()
|
||||
|
@ -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<string, Regex> dicRegexAlias = new ConcurrentDictionary<string, Regex>();
|
||||
public void ExpressionJoinLambda(List<SelectTableInfo> _tables, SelectTableInfoType tbtype, Expression exp, Func<Expression[], string> 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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user