mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 09:15:27 +08:00 
			
		
		
		
	- 修复 ISelect .From 方法之前使用 .Include 方法,导致生成的多表 JOIN 位置错误的 bug;#128
This commit is contained in:
		@@ -199,6 +199,11 @@
 | 
			
		||||
            创建日期
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:FreeSql.Tests.UnitTest2.Comment.Text">
 | 
			
		||||
            <summary>
 | 
			
		||||
            回复的文本内容
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="T:SaleIDO.Entity.Storeage.AdjustPriceOrder">
 | 
			
		||||
            <summary>
 | 
			
		||||
            调价单
 | 
			
		||||
 
 | 
			
		||||
@@ -137,10 +137,43 @@ namespace FreeSql.Tests
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public class LinUser
 | 
			
		||||
        {
 | 
			
		||||
            public long id { get; set; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public class Comment
 | 
			
		||||
        {
 | 
			
		||||
            public Guid Id { get; set; }
 | 
			
		||||
            /// <summary>
 | 
			
		||||
            /// 回复的文本内容
 | 
			
		||||
            /// </summary>
 | 
			
		||||
            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<Comment, UserLike>()
 | 
			
		||||
    .LeftJoin((a, b) => a.Id == b.SubjectId)
 | 
			
		||||
    .ToList((a, b) => new { comment = a, b.SubjectId, user = a.UserInfo });
 | 
			
		||||
 | 
			
		||||
            var comments2 = g.mysql.Select<Comment>()
 | 
			
		||||
    .Include(r => r.UserInfo)
 | 
			
		||||
    .From<UserLike>((z, b) => z.LeftJoin(u => u.Id == b.SubjectId))
 | 
			
		||||
    .ToList((a, b) => new { comment = a, b.SubjectId, user = a.UserInfo });
 | 
			
		||||
 | 
			
		||||
            g.sqlite.Delete<SysModulePermission>().Where("1=1").ExecuteAffrows();
 | 
			
		||||
            g.sqlite.Delete<SysModuleButton>().Where("1=1").ExecuteAffrows();
 | 
			
		||||
            g.sqlite.Delete<SysModule>().Where("1=1").ExecuteAffrows();
 | 
			
		||||
 
 | 
			
		||||
@@ -71,20 +71,28 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                toType.GetField("_tables", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(to, new List<SelectTableInfo>(from._tables.ToArray()));
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                var findedIndexs = new List<int>();
 | 
			
		||||
                var _multiTables = toType.GetField("_tables", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(to) as List<SelectTableInfo>;
 | 
			
		||||
                _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);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user