mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 17:20:49 +08:00 
			
		
		
		
	- 优化 子查询 sum/min/max/avg 默认加 isnull 防止为 NULL 情况;
This commit is contained in:
		@@ -559,14 +559,5 @@
 | 
				
			|||||||
            <param name="that"></param>
 | 
					            <param name="that"></param>
 | 
				
			||||||
            <returns></returns>
 | 
					            <returns></returns>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
        <member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            批量注入 Repository,可以参考代码自行调整
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
            <param name="services"></param>
 | 
					 | 
				
			||||||
            <param name="globalDataFilter"></param>
 | 
					 | 
				
			||||||
            <param name="assemblies"></param>
 | 
					 | 
				
			||||||
            <returns></returns>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
    </members>
 | 
					    </members>
 | 
				
			||||||
</doc>
 | 
					</doc>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
using FreeSql.DataAnnotations;
 | 
					using FreeSql.DataAnnotations;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
@@ -850,8 +850,8 @@ WHERE (exists(SELECT 1
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = (long)select.As("b").Sum(b => b.Id)
 | 
					                count = (long)select.As("b").Sum(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.Id as1, a.Clicks as2, a.TypeGuid as3, a.Title as4, a.CreateTime as5, (SELECT sum(b.Id) 
 | 
					            Assert.Equal(@"SELECT a.Id as1, a.Clicks as2, a.TypeGuid as3, a.Title as4, a.CreateTime as5, nvl((SELECT sum(b.Id) 
 | 
				
			||||||
    FROM tb_topic22 b) as6 
 | 
					    FROM tb_topic22 b), 0) as6 
 | 
				
			||||||
FROM tb_topic22 a", subquery);
 | 
					FROM tb_topic22 a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -867,8 +867,8 @@ FROM tb_topic22 a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Min(b => b.Id)
 | 
					                count = select.As("b").Min(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.Id as1, a.Clicks as2, a.TypeGuid as3, a.Title as4, a.CreateTime as5, (SELECT min(b.Id) 
 | 
					            Assert.Equal(@"SELECT a.Id as1, a.Clicks as2, a.TypeGuid as3, a.Title as4, a.CreateTime as5, nvl((SELECT min(b.Id) 
 | 
				
			||||||
    FROM tb_topic22 b) as6 
 | 
					    FROM tb_topic22 b), 0) as6 
 | 
				
			||||||
FROM tb_topic22 a", subquery);
 | 
					FROM tb_topic22 a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -884,8 +884,8 @@ FROM tb_topic22 a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Max(b => b.Id)
 | 
					                count = select.As("b").Max(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.Id as1, a.Clicks as2, a.TypeGuid as3, a.Title as4, a.CreateTime as5, (SELECT max(b.Id) 
 | 
					            Assert.Equal(@"SELECT a.Id as1, a.Clicks as2, a.TypeGuid as3, a.Title as4, a.CreateTime as5, nvl((SELECT max(b.Id) 
 | 
				
			||||||
    FROM tb_topic22 b) as6 
 | 
					    FROM tb_topic22 b), 0) as6 
 | 
				
			||||||
FROM tb_topic22 a", subquery);
 | 
					FROM tb_topic22 a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -901,8 +901,8 @@ FROM tb_topic22 a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Avg(b => b.Id)
 | 
					                count = select.As("b").Avg(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.Id as1, a.Clicks as2, a.TypeGuid as3, a.Title as4, a.CreateTime as5, (SELECT avg(b.Id) 
 | 
					            Assert.Equal(@"SELECT a.Id as1, a.Clicks as2, a.TypeGuid as3, a.Title as4, a.CreateTime as5, nvl((SELECT avg(b.Id) 
 | 
				
			||||||
    FROM tb_topic22 b) as6 
 | 
					    FROM tb_topic22 b), 0) as6 
 | 
				
			||||||
FROM tb_topic22 a", subquery);
 | 
					FROM tb_topic22 a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1070,8 +1070,8 @@ limit 0,10", t1);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = (long)select.As("b").Sum(b => b.Id)
 | 
					                count = (long)select.As("b").Sum(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT sum(b.`Id`) 
 | 
					            Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, ifnull((SELECT sum(b.`Id`) 
 | 
				
			||||||
    FROM `tb_topic` b) as6 
 | 
					    FROM `tb_topic` b), 0) as6 
 | 
				
			||||||
FROM `tb_topic` a", subquery);
 | 
					FROM `tb_topic` a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -1087,8 +1087,8 @@ FROM `tb_topic` a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Min(b => b.Id)
 | 
					                count = select.As("b").Min(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT min(b.`Id`) 
 | 
					            Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, ifnull((SELECT min(b.`Id`) 
 | 
				
			||||||
    FROM `tb_topic` b) as6 
 | 
					    FROM `tb_topic` b), 0) as6 
 | 
				
			||||||
FROM `tb_topic` a", subquery);
 | 
					FROM `tb_topic` a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -1104,8 +1104,8 @@ FROM `tb_topic` a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Max(b => b.Id)
 | 
					                count = select.As("b").Max(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT max(b.`Id`) 
 | 
					            Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, ifnull((SELECT max(b.`Id`) 
 | 
				
			||||||
    FROM `tb_topic` b) as6 
 | 
					    FROM `tb_topic` b), 0) as6 
 | 
				
			||||||
FROM `tb_topic` a", subquery);
 | 
					FROM `tb_topic` a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -1121,8 +1121,8 @@ FROM `tb_topic` a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Avg(b => b.Id)
 | 
					                count = select.As("b").Avg(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT avg(b.`Id`) 
 | 
					            Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, ifnull((SELECT avg(b.`Id`) 
 | 
				
			||||||
    FROM `tb_topic` b) as6 
 | 
					    FROM `tb_topic` b), 0) as6 
 | 
				
			||||||
FROM `tb_topic` a", subquery);
 | 
					FROM `tb_topic` a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
using FreeSql.DataAnnotations;
 | 
					using FreeSql.DataAnnotations;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
@@ -864,8 +864,8 @@ ORDER BY dbms_random.value) t WHERE ROWNUM < 11", t1);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = (long)select.As("b").Sum(b => b.Id)
 | 
					                count = (long)select.As("b").Sum(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT sum(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT sum(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b) as6 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -881,8 +881,8 @@ FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Min(b => b.Id)
 | 
					                count = select.As("b").Min(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT min(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT min(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b) as6 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -898,8 +898,8 @@ FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Max(b => b.Id)
 | 
					                count = select.As("b").Max(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT max(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT max(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b) as6 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -915,8 +915,8 @@ FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Avg(b => b.Id)
 | 
					                count = select.As("b").Avg(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT avg(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT avg(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b) as6 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
using FreeSql.DataAnnotations;
 | 
					using FreeSql.DataAnnotations;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
@@ -829,8 +829,8 @@ namespace FreeSql.Tests.Odbc.Default
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = (long)select.As("b").Sum(b => b.Id)
 | 
					                count = (long)select.As("b").Sum(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT sum(b.[Id]) 
 | 
					            Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, isnull((SELECT sum(b.[Id]) 
 | 
				
			||||||
    FROM [tb_topic22] b) as6 
 | 
					    FROM [tb_topic22] b), 0) as6 
 | 
				
			||||||
FROM [tb_topic22] a", subquery);
 | 
					FROM [tb_topic22] a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -846,8 +846,8 @@ FROM [tb_topic22] a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Min(b => b.Id)
 | 
					                count = select.As("b").Min(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT min(b.[Id]) 
 | 
					            Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, isnull((SELECT min(b.[Id]) 
 | 
				
			||||||
    FROM [tb_topic22] b) as6 
 | 
					    FROM [tb_topic22] b), 0) as6 
 | 
				
			||||||
FROM [tb_topic22] a", subquery);
 | 
					FROM [tb_topic22] a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -863,8 +863,8 @@ FROM [tb_topic22] a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Max(b => b.Id)
 | 
					                count = select.As("b").Max(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT max(b.[Id]) 
 | 
					            Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, isnull((SELECT max(b.[Id]) 
 | 
				
			||||||
    FROM [tb_topic22] b) as6 
 | 
					    FROM [tb_topic22] b), 0) as6 
 | 
				
			||||||
FROM [tb_topic22] a", subquery);
 | 
					FROM [tb_topic22] a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -880,8 +880,8 @@ FROM [tb_topic22] a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Avg(b => b.Id)
 | 
					                count = select.As("b").Avg(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT avg(b.[Id]) 
 | 
					            Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, isnull((SELECT avg(b.[Id]) 
 | 
				
			||||||
    FROM [tb_topic22] b) as6 
 | 
					    FROM [tb_topic22] b), 0) as6 
 | 
				
			||||||
FROM [tb_topic22] a", subquery);
 | 
					FROM [tb_topic22] a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
using FreeSql.DataAnnotations;
 | 
					using FreeSql.DataAnnotations;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
@@ -830,8 +830,8 @@ limit 10", t1);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = (long)select.As("b").Sum(b => b.Id)
 | 
					                count = (long)select.As("b").Sum(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT sum(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT sum(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b) as6 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -847,8 +847,8 @@ FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Min(b => b.Id)
 | 
					                count = select.As("b").Min(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT min(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT min(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b) as6 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -864,8 +864,8 @@ FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Max(b => b.Id)
 | 
					                count = select.As("b").Max(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT max(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT max(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b) as6 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -881,8 +881,8 @@ FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Avg(b => b.Id)
 | 
					                count = select.As("b").Avg(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT avg(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT avg(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b) as6 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
using FreeSql.DataAnnotations;
 | 
					using FreeSql.DataAnnotations;
 | 
				
			||||||
using Newtonsoft.Json;
 | 
					using Newtonsoft.Json;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
@@ -950,8 +950,8 @@ limit 0,10", t1);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = (long)select.As("b").Sum(b => b.Id)
 | 
					                count = (long)select.As("b").Sum(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT sum(b.`Id`) 
 | 
					            Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, ifnull((SELECT sum(b.`Id`) 
 | 
				
			||||||
    FROM `tb_topic` b) as6 
 | 
					    FROM `tb_topic` b), 0) as6 
 | 
				
			||||||
FROM `tb_topic` a", subquery);
 | 
					FROM `tb_topic` a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -967,8 +967,8 @@ FROM `tb_topic` a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Min(b => b.Id)
 | 
					                count = select.As("b").Min(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT min(b.`Id`) 
 | 
					            Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, ifnull((SELECT min(b.`Id`) 
 | 
				
			||||||
    FROM `tb_topic` b) as6 
 | 
					    FROM `tb_topic` b), 0) as6 
 | 
				
			||||||
FROM `tb_topic` a", subquery);
 | 
					FROM `tb_topic` a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -984,8 +984,8 @@ FROM `tb_topic` a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Max(b => b.Id)
 | 
					                count = select.As("b").Max(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT max(b.`Id`) 
 | 
					            Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, ifnull((SELECT max(b.`Id`) 
 | 
				
			||||||
    FROM `tb_topic` b) as6 
 | 
					    FROM `tb_topic` b), 0) as6 
 | 
				
			||||||
FROM `tb_topic` a", subquery);
 | 
					FROM `tb_topic` a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -1001,8 +1001,8 @@ FROM `tb_topic` a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Avg(b => b.Id)
 | 
					                count = select.As("b").Avg(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT avg(b.`Id`) 
 | 
					            Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, ifnull((SELECT avg(b.`Id`) 
 | 
				
			||||||
    FROM `tb_topic` b) as6 
 | 
					    FROM `tb_topic` b), 0) as6 
 | 
				
			||||||
FROM `tb_topic` a", subquery);
 | 
					FROM `tb_topic` a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
using FreeSql.DataAnnotations;
 | 
					using FreeSql.DataAnnotations;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
@@ -865,8 +865,8 @@ ORDER BY dbms_random.value) t WHERE ROWNUM < 11", t1);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = (long)select.As("b").Sum(b => b.Id)
 | 
					                count = (long)select.As("b").Sum(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT sum(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT sum(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b) as6 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -882,8 +882,8 @@ FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Min(b => b.Id)
 | 
					                count = select.As("b").Min(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT min(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT min(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b) as6 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -899,8 +899,8 @@ FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Max(b => b.Id)
 | 
					                count = select.As("b").Max(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT max(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT max(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b) as6 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -916,13 +916,13 @@ FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Avg(b => b.Id)
 | 
					                count = select.As("b").Avg(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT avg(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT avg(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b) as6 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.Limit(10).ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Avg(b => b.Id)
 | 
					                count = select.As("b").Limit(10).Avg(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
using FreeSql.DataAnnotations;
 | 
					using FreeSql.DataAnnotations;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
@@ -926,8 +926,8 @@ limit 10", t1);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = (long)select.As("b").Sum(b => b.Id)
 | 
					                count = (long)select.As("b").Sum(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, (SELECT sum(b.""id"") 
 | 
					            Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, coalesce((SELECT sum(b.""id"") 
 | 
				
			||||||
    FROM ""tb_topic"" b) as6 
 | 
					    FROM ""tb_topic"" b), 0) as6 
 | 
				
			||||||
FROM ""tb_topic"" a", subquery);
 | 
					FROM ""tb_topic"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -943,8 +943,8 @@ FROM ""tb_topic"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Min(b => b.Id)
 | 
					                count = select.As("b").Min(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, (SELECT min(b.""id"") 
 | 
					            Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, coalesce((SELECT min(b.""id"") 
 | 
				
			||||||
    FROM ""tb_topic"" b) as6 
 | 
					    FROM ""tb_topic"" b), 0) as6 
 | 
				
			||||||
FROM ""tb_topic"" a", subquery);
 | 
					FROM ""tb_topic"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -960,8 +960,8 @@ FROM ""tb_topic"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Max(b => b.Id)
 | 
					                count = select.As("b").Max(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, (SELECT max(b.""id"") 
 | 
					            Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, coalesce((SELECT max(b.""id"") 
 | 
				
			||||||
    FROM ""tb_topic"" b) as6 
 | 
					    FROM ""tb_topic"" b), 0) as6 
 | 
				
			||||||
FROM ""tb_topic"" a", subquery);
 | 
					FROM ""tb_topic"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -977,8 +977,8 @@ FROM ""tb_topic"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Avg(b => b.Id)
 | 
					                count = select.As("b").Avg(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, (SELECT avg(b.""id"") 
 | 
					            Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, coalesce((SELECT avg(b.""id"") 
 | 
				
			||||||
    FROM ""tb_topic"" b) as6 
 | 
					    FROM ""tb_topic"" b), 0) as6 
 | 
				
			||||||
FROM ""tb_topic"" a", subquery);
 | 
					FROM ""tb_topic"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -820,8 +820,8 @@ ORDER BY newid()", t1);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = (long)select.As("b").Sum(b => b.Id)
 | 
					                count = (long)select.As("b").Sum(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT sum(b.[Id]) 
 | 
					            Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, isnull((SELECT sum(b.[Id]) 
 | 
				
			||||||
    FROM [tb_topic22] b) as6 
 | 
					    FROM [tb_topic22] b), 0) as6 
 | 
				
			||||||
FROM [tb_topic22] a", subquery);
 | 
					FROM [tb_topic22] a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -837,8 +837,8 @@ FROM [tb_topic22] a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Min(b => b.Id)
 | 
					                count = select.As("b").Min(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT min(b.[Id]) 
 | 
					            Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, isnull((SELECT min(b.[Id]) 
 | 
				
			||||||
    FROM [tb_topic22] b) as6 
 | 
					    FROM [tb_topic22] b), 0) as6 
 | 
				
			||||||
FROM [tb_topic22] a", subquery);
 | 
					FROM [tb_topic22] a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -854,8 +854,8 @@ FROM [tb_topic22] a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Max(b => b.Id)
 | 
					                count = select.As("b").Max(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT max(b.[Id]) 
 | 
					            Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, isnull((SELECT max(b.[Id]) 
 | 
				
			||||||
    FROM [tb_topic22] b) as6 
 | 
					    FROM [tb_topic22] b), 0) as6 
 | 
				
			||||||
FROM [tb_topic22] a", subquery);
 | 
					FROM [tb_topic22] a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -871,8 +871,8 @@ FROM [tb_topic22] a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Avg(b => b.Id)
 | 
					                count = select.As("b").Avg(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT avg(b.[Id]) 
 | 
					            Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, isnull((SELECT avg(b.[Id]) 
 | 
				
			||||||
    FROM [tb_topic22] b) as6 
 | 
					    FROM [tb_topic22] b), 0) as6 
 | 
				
			||||||
FROM [tb_topic22] a", subquery);
 | 
					FROM [tb_topic22] a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -871,8 +871,8 @@ limit 0,10", t1);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = (long)select.As("b").Sum(b => b.Id)
 | 
					                count = (long)select.As("b").Sum(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, (SELECT sum(b.""Id"") 
 | 
					            Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, ifnull((SELECT sum(b.""Id"") 
 | 
				
			||||||
    FROM ""tb_topic22"" b) as6 
 | 
					    FROM ""tb_topic22"" b), 0) as6 
 | 
				
			||||||
FROM ""tb_topic22"" a", subquery);
 | 
					FROM ""tb_topic22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -888,8 +888,8 @@ FROM ""tb_topic22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Min(b => b.Id)
 | 
					                count = select.As("b").Min(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, (SELECT min(b.""Id"") 
 | 
					            Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, ifnull((SELECT min(b.""Id"") 
 | 
				
			||||||
    FROM ""tb_topic22"" b) as6 
 | 
					    FROM ""tb_topic22"" b), 0) as6 
 | 
				
			||||||
FROM ""tb_topic22"" a", subquery);
 | 
					FROM ""tb_topic22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -905,8 +905,8 @@ FROM ""tb_topic22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Max(b => b.Id)
 | 
					                count = select.As("b").Max(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, (SELECT max(b.""Id"") 
 | 
					            Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, ifnull((SELECT max(b.""Id"") 
 | 
				
			||||||
    FROM ""tb_topic22"" b) as6 
 | 
					    FROM ""tb_topic22"" b), 0) as6 
 | 
				
			||||||
FROM ""tb_topic22"" a", subquery);
 | 
					FROM ""tb_topic22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -922,8 +922,8 @@ FROM ""tb_topic22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Avg(b => b.Id)
 | 
					                count = select.As("b").Avg(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, (SELECT avg(b.""Id"") 
 | 
					            Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, ifnull((SELECT avg(b.""Id"") 
 | 
				
			||||||
    FROM ""tb_topic22"" b) as6 
 | 
					    FROM ""tb_topic22"" b), 0) as6 
 | 
				
			||||||
FROM ""tb_topic22"" a", subquery);
 | 
					FROM ""tb_topic22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -997,8 +997,8 @@ ORDER BY dbms_random.value) t WHERE ROWNUM < 11", t1);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = (long)select.As("b").Sum(b => b.Id)
 | 
					                count = (long)select.As("b").Sum(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT sum(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT sum(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b) as6 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -1014,8 +1014,8 @@ FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Min(b => b.Id)
 | 
					                count = select.As("b").Min(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT min(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT min(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b) as6 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -1031,8 +1031,8 @@ FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Max(b => b.Id)
 | 
					                count = select.As("b").Max(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT max(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT max(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b) as6 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -1048,8 +1048,8 @@ FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Avg(b => b.Id)
 | 
					                count = select.As("b").Avg(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT avg(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT avg(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b) as6 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -980,8 +980,8 @@ ORDER BY rand()", t1);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = (long)select.As("b").Sum(b => b.Id)
 | 
					                count = (long)select.As("b").Sum(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT sum(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT sum(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b) as6 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -997,8 +997,8 @@ FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Min(b => b.Id)
 | 
					                count = select.As("b").Min(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT min(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT min(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b) as6 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -1014,8 +1014,8 @@ FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Max(b => b.Id)
 | 
					                count = select.As("b").Max(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT max(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT max(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b) as6 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -1031,8 +1031,8 @@ FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Avg(b => b.Id)
 | 
					                count = select.As("b").Avg(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT avg(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT avg(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b) as6 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
using FreeSql.DataAnnotations;
 | 
					using FreeSql.DataAnnotations;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
@@ -830,9 +830,8 @@ limit 10", t1);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = (long)select.As("b").Sum(b => b.Id)
 | 
					                count = (long)select.As("b").Sum(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT sum(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT sum(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
    limit 1) as6 
 | 
					 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -848,9 +847,8 @@ FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Min(b => b.Id)
 | 
					                count = select.As("b").Min(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT min(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT min(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
    limit 1) as6 
 | 
					 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -866,9 +864,8 @@ FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Max(b => b.Id)
 | 
					                count = select.As("b").Max(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT max(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT max(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
    limit 1) as6 
 | 
					 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -884,9 +881,8 @@ FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Avg(b => b.Id)
 | 
					                count = select.As("b").Avg(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT avg(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT avg(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
    limit 1) as6 
 | 
					 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -945,8 +945,9 @@ WHERE (((a.[Name]) in (SELECT s.[Title] as as1
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = (long)select.As("b").Sum(b => b.Id)
 | 
					                count = (long)select.As("b").Sum(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.[Id] as as1, a.[Clicks] as as2, a.[TypeGuid] as as3, a.[Title] as as4, a.[CreateTime] as as5, (SELECT sum(b.[Id]) 
 | 
					            Assert.Equal(@"SELECT a.[Id] as as1, a.[Clicks] as as2, a.[TypeGuid] as as3, a.[Title] as as4, a.[CreateTime] as as5, iif(isnull((SELECT sum(b.[Id]) 
 | 
				
			||||||
    FROM [tb_topic22] b) as as6 
 | 
					    FROM [tb_topic22] b)), 0, (SELECT sum(b.[Id]) 
 | 
				
			||||||
 | 
					    FROM [tb_topic22] b)) as as6 
 | 
				
			||||||
FROM [tb_topic22] a", subquery);
 | 
					FROM [tb_topic22] a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -962,8 +963,9 @@ FROM [tb_topic22] a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Min(b => b.Id)
 | 
					                count = select.As("b").Min(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.[Id] as as1, a.[Clicks] as as2, a.[TypeGuid] as as3, a.[Title] as as4, a.[CreateTime] as as5, (SELECT min(b.[Id]) 
 | 
					            Assert.Equal(@"SELECT a.[Id] as as1, a.[Clicks] as as2, a.[TypeGuid] as as3, a.[Title] as as4, a.[CreateTime] as as5, iif(isnull((SELECT min(b.[Id]) 
 | 
				
			||||||
    FROM [tb_topic22] b) as as6 
 | 
					    FROM [tb_topic22] b)), 0, (SELECT min(b.[Id]) 
 | 
				
			||||||
 | 
					    FROM [tb_topic22] b)) as as6 
 | 
				
			||||||
FROM [tb_topic22] a", subquery);
 | 
					FROM [tb_topic22] a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -979,8 +981,9 @@ FROM [tb_topic22] a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Max(b => b.Id)
 | 
					                count = select.As("b").Max(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.[Id] as as1, a.[Clicks] as as2, a.[TypeGuid] as as3, a.[Title] as as4, a.[CreateTime] as as5, (SELECT max(b.[Id]) 
 | 
					            Assert.Equal(@"SELECT a.[Id] as as1, a.[Clicks] as as2, a.[TypeGuid] as as3, a.[Title] as as4, a.[CreateTime] as as5, iif(isnull((SELECT max(b.[Id]) 
 | 
				
			||||||
    FROM [tb_topic22] b) as as6 
 | 
					    FROM [tb_topic22] b)), 0, (SELECT max(b.[Id]) 
 | 
				
			||||||
 | 
					    FROM [tb_topic22] b)) as as6 
 | 
				
			||||||
FROM [tb_topic22] a", subquery);
 | 
					FROM [tb_topic22] a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -996,8 +999,9 @@ FROM [tb_topic22] a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Avg(b => b.Id)
 | 
					                count = select.As("b").Avg(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.[Id] as as1, a.[Clicks] as as2, a.[TypeGuid] as as3, a.[Title] as as4, a.[CreateTime] as as5, (SELECT avg(b.[Id]) 
 | 
					            Assert.Equal(@"SELECT a.[Id] as as1, a.[Clicks] as as2, a.[TypeGuid] as as3, a.[Title] as as4, a.[CreateTime] as as5, iif(isnull((SELECT avg(b.[Id]) 
 | 
				
			||||||
    FROM [tb_topic22] b) as as6 
 | 
					    FROM [tb_topic22] b)), 0, (SELECT avg(b.[Id]) 
 | 
				
			||||||
 | 
					    FROM [tb_topic22] b)) as as6 
 | 
				
			||||||
FROM [tb_topic22] a", subquery);
 | 
					FROM [tb_topic22] a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1133,8 +1133,8 @@ limit 0,10", t1);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = (long)select.As("b").Sum(b => b.Id)
 | 
					                count = (long)select.As("b").Sum(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT sum(b.`Id`) 
 | 
					            Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, ifnull((SELECT sum(b.`Id`) 
 | 
				
			||||||
    FROM `tb_topic` b) as6 
 | 
					    FROM `tb_topic` b), 0) as6 
 | 
				
			||||||
FROM `tb_topic` a", subquery);
 | 
					FROM `tb_topic` a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -1150,8 +1150,8 @@ FROM `tb_topic` a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Min(b => b.Id)
 | 
					                count = select.As("b").Min(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT min(b.`Id`) 
 | 
					            Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, ifnull((SELECT min(b.`Id`) 
 | 
				
			||||||
    FROM `tb_topic` b) as6 
 | 
					    FROM `tb_topic` b), 0) as6 
 | 
				
			||||||
FROM `tb_topic` a", subquery);
 | 
					FROM `tb_topic` a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -1167,8 +1167,8 @@ FROM `tb_topic` a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Max(b => b.Id)
 | 
					                count = select.As("b").Max(b => b.Id)
 | 
				
			||||||
            }); 
 | 
					            }); 
 | 
				
			||||||
            Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT max(b.`Id`) 
 | 
					            Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, ifnull((SELECT max(b.`Id`) 
 | 
				
			||||||
    FROM `tb_topic` b) as6 
 | 
					    FROM `tb_topic` b), 0) as6 
 | 
				
			||||||
FROM `tb_topic` a", subquery);
 | 
					FROM `tb_topic` a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -1184,8 +1184,8 @@ FROM `tb_topic` a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Avg(b => b.Id)
 | 
					                count = select.As("b").Avg(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT avg(b.`Id`) 
 | 
					            Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, ifnull((SELECT avg(b.`Id`) 
 | 
				
			||||||
    FROM `tb_topic` b) as6 
 | 
					    FROM `tb_topic` b), 0) as6 
 | 
				
			||||||
FROM `tb_topic` a", subquery);
 | 
					FROM `tb_topic` a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -984,8 +984,8 @@ ORDER BY dbms_random.value) t WHERE ROWNUM < 11", t1);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = (long)select.As("b").Sum(b => b.Id)
 | 
					                count = (long)select.As("b").Sum(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT sum(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT sum(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b) as6 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -1001,8 +1001,8 @@ FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Min(b => b.Id)
 | 
					                count = select.As("b").Min(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT min(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT min(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b) as6 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -1018,8 +1018,8 @@ FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Max(b => b.Id)
 | 
					                count = select.As("b").Max(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT max(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT max(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b) as6 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -1035,8 +1035,8 @@ FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Avg(b => b.Id)
 | 
					                count = select.As("b").Avg(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT avg(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT avg(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC22"" b) as6 
 | 
					    FROM ""TB_TOPIC22"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC22"" a", subquery);
 | 
					FROM ""TB_TOPIC22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.Limit(10).ToList(a => new
 | 
					            var subqueryList = select.Limit(10).ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1074,8 +1074,8 @@ limit 10", t1);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = (long)select.As("b").Sum(b => b.Id)
 | 
					                count = (long)select.As("b").Sum(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, (SELECT sum(b.""id"") 
 | 
					            Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, coalesce((SELECT sum(b.""id"") 
 | 
				
			||||||
    FROM ""tb_topic"" b) as6 
 | 
					    FROM ""tb_topic"" b), 0) as6 
 | 
				
			||||||
FROM ""tb_topic"" a", subquery);
 | 
					FROM ""tb_topic"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -1091,8 +1091,8 @@ FROM ""tb_topic"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Min(b => b.Id)
 | 
					                count = select.As("b").Min(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, (SELECT min(b.""id"") 
 | 
					            Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, coalesce((SELECT min(b.""id"") 
 | 
				
			||||||
    FROM ""tb_topic"" b) as6 
 | 
					    FROM ""tb_topic"" b), 0) as6 
 | 
				
			||||||
FROM ""tb_topic"" a", subquery);
 | 
					FROM ""tb_topic"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -1108,8 +1108,8 @@ FROM ""tb_topic"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Max(b => b.Id)
 | 
					                count = select.As("b").Max(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, (SELECT max(b.""id"") 
 | 
					            Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, coalesce((SELECT max(b.""id"") 
 | 
				
			||||||
    FROM ""tb_topic"" b) as6 
 | 
					    FROM ""tb_topic"" b), 0) as6 
 | 
				
			||||||
FROM ""tb_topic"" a", subquery);
 | 
					FROM ""tb_topic"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -1125,8 +1125,8 @@ FROM ""tb_topic"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Avg(b => b.Id)
 | 
					                count = select.As("b").Avg(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, (SELECT avg(b.""id"") 
 | 
					            Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, coalesce((SELECT avg(b.""id"") 
 | 
				
			||||||
    FROM ""tb_topic"" b) as6 
 | 
					    FROM ""tb_topic"" b), 0) as6 
 | 
				
			||||||
FROM ""tb_topic"" a", subquery);
 | 
					FROM ""tb_topic"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
using FreeSql.DataAnnotations;
 | 
					using FreeSql.DataAnnotations;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
@@ -944,8 +944,8 @@ limit 10", t1);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = (long)select.As("b").Sum(b => b.Id)
 | 
					                count = (long)select.As("b").Sum(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT sum(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT sum(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC"" b) as6 
 | 
					    FROM ""TB_TOPIC"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC"" a", subquery);
 | 
					FROM ""TB_TOPIC"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -961,8 +961,8 @@ FROM ""TB_TOPIC"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Min(b => b.Id)
 | 
					                count = select.As("b").Min(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT min(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT min(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC"" b) as6 
 | 
					    FROM ""TB_TOPIC"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC"" a", subquery);
 | 
					FROM ""TB_TOPIC"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -978,8 +978,8 @@ FROM ""TB_TOPIC"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Max(b => b.Id)
 | 
					                count = select.As("b").Max(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT max(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT max(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC"" b) as6 
 | 
					    FROM ""TB_TOPIC"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC"" a", subquery);
 | 
					FROM ""TB_TOPIC"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -995,8 +995,8 @@ FROM ""TB_TOPIC"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Avg(b => b.Id)
 | 
					                count = select.As("b").Avg(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT avg(b.""ID"") 
 | 
					            Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT avg(b.""ID"") 
 | 
				
			||||||
    FROM ""TB_TOPIC"" b) as6 
 | 
					    FROM ""TB_TOPIC"" b), 0) as6 
 | 
				
			||||||
FROM ""TB_TOPIC"" a", subquery);
 | 
					FROM ""TB_TOPIC"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -981,8 +981,8 @@ ORDER BY newid()", t1);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = (long)select.As("b").Sum(b => b.Id)
 | 
					                count = (long)select.As("b").Sum(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT sum(b.[Id]) 
 | 
					            Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, isnull((SELECT sum(b.[Id]) 
 | 
				
			||||||
    FROM [tb_topic22] b) as6 
 | 
					    FROM [tb_topic22] b), 0) as6 
 | 
				
			||||||
FROM [tb_topic22] a", subquery);
 | 
					FROM [tb_topic22] a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -998,8 +998,8 @@ FROM [tb_topic22] a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Min(b => b.Id)
 | 
					                count = select.As("b").Min(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT min(b.[Id]) 
 | 
					            Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, isnull((SELECT min(b.[Id]) 
 | 
				
			||||||
    FROM [tb_topic22] b) as6 
 | 
					    FROM [tb_topic22] b), 0) as6 
 | 
				
			||||||
FROM [tb_topic22] a", subquery);
 | 
					FROM [tb_topic22] a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -1015,8 +1015,8 @@ FROM [tb_topic22] a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Max(b => b.Id)
 | 
					                count = select.As("b").Max(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT max(b.[Id]) 
 | 
					            Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, isnull((SELECT max(b.[Id]) 
 | 
				
			||||||
    FROM [tb_topic22] b) as6 
 | 
					    FROM [tb_topic22] b), 0) as6 
 | 
				
			||||||
FROM [tb_topic22] a", subquery);
 | 
					FROM [tb_topic22] a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -1032,8 +1032,8 @@ FROM [tb_topic22] a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Avg(b => b.Id)
 | 
					                count = select.As("b").Avg(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT avg(b.[Id]) 
 | 
					            Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, isnull((SELECT avg(b.[Id]) 
 | 
				
			||||||
    FROM [tb_topic22] b) as6 
 | 
					    FROM [tb_topic22] b), 0) as6 
 | 
				
			||||||
FROM [tb_topic22] a", subquery);
 | 
					FROM [tb_topic22] a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1003,8 +1003,8 @@ limit 0,10", t1);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = (long)select.As("b").Sum(b => b.Id)
 | 
					                count = (long)select.As("b").Sum(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, (SELECT sum(b.""Id"") 
 | 
					            Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, ifnull((SELECT sum(b.""Id"") 
 | 
				
			||||||
    FROM ""tb_topic22"" b) as6 
 | 
					    FROM ""tb_topic22"" b), 0) as6 
 | 
				
			||||||
FROM ""tb_topic22"" a", subquery);
 | 
					FROM ""tb_topic22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -1020,8 +1020,8 @@ FROM ""tb_topic22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Min(b => b.Id)
 | 
					                count = select.As("b").Min(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, (SELECT min(b.""Id"") 
 | 
					            Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, ifnull((SELECT min(b.""Id"") 
 | 
				
			||||||
    FROM ""tb_topic22"" b) as6 
 | 
					    FROM ""tb_topic22"" b), 0) as6 
 | 
				
			||||||
FROM ""tb_topic22"" a", subquery);
 | 
					FROM ""tb_topic22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -1037,8 +1037,8 @@ FROM ""tb_topic22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Max(b => b.Id)
 | 
					                count = select.As("b").Max(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, (SELECT max(b.""Id"") 
 | 
					            Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, ifnull((SELECT max(b.""Id"") 
 | 
				
			||||||
    FROM ""tb_topic22"" b) as6 
 | 
					    FROM ""tb_topic22"" b), 0) as6 
 | 
				
			||||||
FROM ""tb_topic22"" a", subquery);
 | 
					FROM ""tb_topic22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -1054,8 +1054,8 @@ FROM ""tb_topic22"" a", subquery);
 | 
				
			|||||||
                all = a,
 | 
					                all = a,
 | 
				
			||||||
                count = select.As("b").Avg(b => b.Id)
 | 
					                count = select.As("b").Avg(b => b.Id)
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, (SELECT avg(b.""Id"") 
 | 
					            Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, ifnull((SELECT avg(b.""Id"") 
 | 
				
			||||||
    FROM ""tb_topic22"" b) as6 
 | 
					    FROM ""tb_topic22"" b), 0) as6 
 | 
				
			||||||
FROM ""tb_topic22"" a", subquery);
 | 
					FROM ""tb_topic22"" a", subquery);
 | 
				
			||||||
            var subqueryList = select.ToList(a => new
 | 
					            var subqueryList = select.ToList(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1264,7 +1264,7 @@ namespace FreeSql.Internal
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                                                                var sql4 = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { $"{exp3.Method.Name.ToLower()}({fieldSql})" })?.ToString();
 | 
					                                                                var sql4 = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { $"{exp3.Method.Name.ToLower()}({fieldSql})" })?.ToString();
 | 
				
			||||||
                                                                asSelectBefores.Clear();
 | 
					                                                                asSelectBefores.Clear();
 | 
				
			||||||
                                                                return $"({sql4.Replace(" \r\n", " \r\n    ")})";
 | 
					                                                                return _common.IsNull($"({sql4.Replace(" \r\n", " \r\n    ")})", 0);
 | 
				
			||||||
                                                        }
 | 
					                                                        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                                        var sql3 = manySubSelectAggMethod.Invoke(fsql, new object[] { exp3Args0, FieldAliasOptions.AsProperty }) as string;
 | 
					                                                        var sql3 = manySubSelectAggMethod.Invoke(fsql, new object[] { exp3Args0, FieldAliasOptions.AsProperty }) as string;
 | 
				
			||||||
@@ -1319,7 +1319,7 @@ namespace FreeSql.Internal
 | 
				
			|||||||
                                                exp3Args0 = new ReplaceHzyTupleToMultiParam().Modify(exp3Args0, fsqltables);
 | 
					                                                exp3Args0 = new ReplaceHzyTupleToMultiParam().Modify(exp3Args0, fsqltables);
 | 
				
			||||||
                                            var sqlSum = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { $"{exp3.Method.Name.ToLower()}({ExpressionLambdaToSql(exp3Args0, tscClone1)})" })?.ToString();
 | 
					                                            var sqlSum = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { $"{exp3.Method.Name.ToLower()}({ExpressionLambdaToSql(exp3Args0, tscClone1)})" })?.ToString();
 | 
				
			||||||
                                            if (string.IsNullOrEmpty(sqlSum) == false)
 | 
					                                            if (string.IsNullOrEmpty(sqlSum) == false)
 | 
				
			||||||
                                                return $"({sqlSum.Replace(" \r\n", " \r\n    ")})";
 | 
					                                                return _common.IsNull($"({sqlSum.Replace(" \r\n", " \r\n    ")})", 0);
 | 
				
			||||||
                                            break;
 | 
					                                            break;
 | 
				
			||||||
                                        case "ToList":
 | 
					                                        case "ToList":
 | 
				
			||||||
                                        case "ToOne":
 | 
					                                        case "ToOne":
 | 
				
			||||||
@@ -2124,7 +2124,7 @@ namespace FreeSql.Internal
 | 
				
			|||||||
                                commonExp.ReadAnonymousField(select._tables, field, map, ref index, callExp.Arguments[1], null, null, null, null, false);
 | 
					                                commonExp.ReadAnonymousField(select._tables, field, map, ref index, callExp.Arguments[1], null, null, null, null, false);
 | 
				
			||||||
                                var fieldSql = field.Length > 0 ? field.Remove(0, 2).ToString() : null;
 | 
					                                var fieldSql = field.Length > 0 ? field.Remove(0, 2).ToString() : null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                e.Result = $"({select.ToSql($"{aggregateMethodName}({fieldSql})").Replace(" \r\n", " \r\n    ")})";
 | 
					                                e.Result = commonExp._common.IsNull($"({select.ToSql($"{aggregateMethodName}({fieldSql})").Replace(" \r\n", " \r\n    ")})", 0);
 | 
				
			||||||
                                return;
 | 
					                                return;
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            throw throwCallExp($"不支持 {callExp.Arguments.Count}个参数的方法");
 | 
					                            throw throwCallExp($"不支持 {callExp.Arguments.Count}个参数的方法");
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user