mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 09:15:27 +08:00 
			
		
		
		
	- 修复 复杂的表达式解析 OR 的括号 bug;
This commit is contained in:
		@@ -539,6 +539,7 @@ namespace FreeSql.Tests.MySql {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			var sqltmp1 = select.Where(a => a.Id == 0 && (a.Title == "x" || a.Title == "y") && a.Clicks == 1).ToSql();
 | 
								var sqltmp1 = select.Where(a => a.Id == 0 && (a.Title == "x" || a.Title == "y") && a.Clicks == 1).ToSql();
 | 
				
			||||||
			var sqltmp2 = select.Where(a => a.Id.Equals(true) && (a.Title.Equals("x") || a.Title.Equals("y")) && a.Clicks.Equals(1)).ToSql();
 | 
								var sqltmp2 = select.Where(a => a.Id.Equals(true) && (a.Title.Equals("x") || a.Title.Equals("y")) && a.Clicks.Equals(1)).ToSql();
 | 
				
			||||||
 | 
								var sqltmp3 = select.Where(a => a.Id == 0).Where(a => ((a.Title == "x" && a.Title == "z") || a.Title == "y")).ToSql();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
								//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
			var query = select.Where(a => a.Id == 10);
 | 
								var query = select.Where(a => a.Id == 10);
 | 
				
			||||||
@@ -548,7 +549,7 @@ namespace FreeSql.Tests.MySql {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			query = select.Where(a => a.Id == 10 && a.Id > 10 || a.Clicks > 100);
 | 
								query = select.Where(a => a.Id == 10 && a.Id > 10 || a.Clicks > 100);
 | 
				
			||||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
								sql = query.ToSql().Replace("\r\n", "");
 | 
				
			||||||
			Assert.Equal("SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a WHERE ((a.`Id` = 10 AND a.`Id` > 10 OR a.`Clicks` > 100))", sql);
 | 
								Assert.Equal("SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a WHERE (((a.`Id` = 10 AND a.`Id` > 10) OR (a.`Clicks` > 100)))", sql);
 | 
				
			||||||
			query.ToList();
 | 
								query.ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			query = select.Where(a => a.Id == 10).Where(a => a.Clicks > 100);
 | 
								query = select.Where(a => a.Id == 10).Where(a => a.Clicks > 100);
 | 
				
			||||||
@@ -611,7 +612,7 @@ namespace FreeSql.Tests.MySql {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			query = select.WhereIf(true, a => a.Id == 10 && a.Id > 10 || a.Clicks > 100);
 | 
								query = select.WhereIf(true, a => a.Id == 10 && a.Id > 10 || a.Clicks > 100);
 | 
				
			||||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
								sql = query.ToSql().Replace("\r\n", "");
 | 
				
			||||||
			Assert.Equal("SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a WHERE ((a.`Id` = 10 AND a.`Id` > 10 OR a.`Clicks` > 100))", sql);
 | 
								Assert.Equal("SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a WHERE (((a.`Id` = 10 AND a.`Id` > 10) OR (a.`Clicks` > 100)))", sql);
 | 
				
			||||||
			query.ToList();
 | 
								query.ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			query = select.WhereIf(true, a => a.Id == 10).WhereIf(true, a => a.Clicks > 100);
 | 
								query = select.WhereIf(true, a => a.Id == 10).WhereIf(true, a => a.Clicks > 100);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -435,6 +435,7 @@ namespace FreeSql.Tests.Oracle {
 | 
				
			|||||||
		public void Where() {
 | 
							public void Where() {
 | 
				
			||||||
			var sqltmp1 = select.Where(a => a.Id == 0 && (a.Title == "x" || a.Title == "y") && a.Clicks == 1).ToSql();
 | 
								var sqltmp1 = select.Where(a => a.Id == 0 && (a.Title == "x" || a.Title == "y") && a.Clicks == 1).ToSql();
 | 
				
			||||||
			var sqltmp2 = select.Where(a => a.Id.Equals(true) && (a.Title.Equals("x") || a.Title.Equals("y")) && a.Clicks.Equals(1)).ToSql();
 | 
								var sqltmp2 = select.Where(a => a.Id.Equals(true) && (a.Title.Equals("x") || a.Title.Equals("y")) && a.Clicks.Equals(1)).ToSql();
 | 
				
			||||||
 | 
								var sqltmp3 = select.Where(a => a.Id == 0).Where(a => ((a.Title == "x" && a.Title == "z") || a.Title == "y")).ToSql();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
								//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
			var query = select.Where(a => a.Id == 10);
 | 
								var query = select.Where(a => a.Id == 10);
 | 
				
			||||||
@@ -444,7 +445,7 @@ namespace FreeSql.Tests.Oracle {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			query = select.Where(a => a.Id == 10 && a.Id > 10 || a.Clicks > 100);
 | 
								query = select.Where(a => a.Id == 10 && a.Id > 10 || a.Clicks > 100);
 | 
				
			||||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
								sql = query.ToSql().Replace("\r\n", "");
 | 
				
			||||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a WHERE ((a.\"ID\" = 10 AND a.\"ID\" > 10 OR a.\"CLICKS\" > 100))", sql);
 | 
								Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a WHERE (((a.\"ID\" = 10 AND a.\"ID\" > 10) OR (a.\"CLICKS\" > 100)))", sql);
 | 
				
			||||||
			query.ToList();
 | 
								query.ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			query = select.Where(a => a.Id == 10).Where(a => a.Clicks > 100);
 | 
								query = select.Where(a => a.Id == 10).Where(a => a.Clicks > 100);
 | 
				
			||||||
@@ -507,7 +508,7 @@ namespace FreeSql.Tests.Oracle {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			query = select.WhereIf(true, a => a.Id == 10 && a.Id > 10 || a.Clicks > 100);
 | 
								query = select.WhereIf(true, a => a.Id == 10 && a.Id > 10 || a.Clicks > 100);
 | 
				
			||||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
								sql = query.ToSql().Replace("\r\n", "");
 | 
				
			||||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a WHERE ((a.\"ID\" = 10 AND a.\"ID\" > 10 OR a.\"CLICKS\" > 100))", sql);
 | 
								Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a WHERE (((a.\"ID\" = 10 AND a.\"ID\" > 10) OR (a.\"CLICKS\" > 100)))", sql);
 | 
				
			||||||
			query.ToList();
 | 
								query.ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			query = select.WhereIf(true, a => a.Id == 10).WhereIf(true, a => a.Clicks > 100);
 | 
								query = select.WhereIf(true, a => a.Id == 10).WhereIf(true, a => a.Clicks > 100);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -506,6 +506,7 @@ namespace FreeSql.Tests.PostgreSQL {
 | 
				
			|||||||
		public void Where() {
 | 
							public void Where() {
 | 
				
			||||||
			var sqltmp1 = select.Where(a => a.Id == 0 && (a.Title == "x" || a.Title == "y") && a.Clicks == 1).ToSql();
 | 
								var sqltmp1 = select.Where(a => a.Id == 0 && (a.Title == "x" || a.Title == "y") && a.Clicks == 1).ToSql();
 | 
				
			||||||
			var sqltmp2 = select.Where(a => a.Id.Equals(true) && (a.Title.Equals("x") || a.Title.Equals("y")) && a.Clicks.Equals(1)).ToSql();
 | 
								var sqltmp2 = select.Where(a => a.Id.Equals(true) && (a.Title.Equals("x") || a.Title.Equals("y")) && a.Clicks.Equals(1)).ToSql();
 | 
				
			||||||
 | 
								var sqltmp3 = select.Where(a => a.Id == 0).Where(a => ((a.Title == "x" && a.Title == "z") || a.Title == "y")).ToSql();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
								//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
			var query = select.Where(a => a.Id == 10);
 | 
								var query = select.Where(a => a.Id == 10);
 | 
				
			||||||
@@ -515,7 +516,7 @@ namespace FreeSql.Tests.PostgreSQL {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			query = select.Where(a => a.Id == 10 && a.Id > 10 || a.Clicks > 100);
 | 
								query = select.Where(a => a.Id == 10 && a.Id > 10 || a.Clicks > 100);
 | 
				
			||||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
								sql = query.ToSql().Replace("\r\n", "");
 | 
				
			||||||
			Assert.Equal("SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topic\" a WHERE ((a.\"id\" = 10 AND a.\"id\" > 10 OR a.\"clicks\" > 100))", sql);
 | 
								Assert.Equal("SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topic\" a WHERE (((a.\"id\" = 10 AND a.\"id\" > 10) OR (a.\"clicks\" > 100)))", sql);
 | 
				
			||||||
			query.ToList();
 | 
								query.ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			query = select.Where(a => a.Id == 10).Where(a => a.Clicks > 100);
 | 
								query = select.Where(a => a.Id == 10).Where(a => a.Clicks > 100);
 | 
				
			||||||
@@ -578,7 +579,7 @@ namespace FreeSql.Tests.PostgreSQL {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			query = select.WhereIf(true, a => a.Id == 10 && a.Id > 10 || a.Clicks > 100);
 | 
								query = select.WhereIf(true, a => a.Id == 10 && a.Id > 10 || a.Clicks > 100);
 | 
				
			||||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
								sql = query.ToSql().Replace("\r\n", "");
 | 
				
			||||||
			Assert.Equal("SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topic\" a WHERE ((a.\"id\" = 10 AND a.\"id\" > 10 OR a.\"clicks\" > 100))", sql);
 | 
								Assert.Equal("SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topic\" a WHERE (((a.\"id\" = 10 AND a.\"id\" > 10) OR (a.\"clicks\" > 100)))", sql);
 | 
				
			||||||
			query.ToList();
 | 
								query.ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			query = select.WhereIf(true, a => a.Id == 10).WhereIf(true, a => a.Clicks > 100);
 | 
								query = select.WhereIf(true, a => a.Id == 10).WhereIf(true, a => a.Clicks > 100);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -437,6 +437,7 @@ namespace FreeSql.Tests.SqlServer {
 | 
				
			|||||||
		public void Where() {
 | 
							public void Where() {
 | 
				
			||||||
			var sqltmp1 = select.Where(a => a.Id == 0 && (a.Title == "x" || a.Title == "y") && a.Clicks == 1).ToSql();
 | 
								var sqltmp1 = select.Where(a => a.Id == 0 && (a.Title == "x" || a.Title == "y") && a.Clicks == 1).ToSql();
 | 
				
			||||||
			var sqltmp2 = select.Where(a => a.Id.Equals(true) && (a.Title.Equals("x") || a.Title.Equals("y")) && a.Clicks.Equals(1)).ToSql();
 | 
								var sqltmp2 = select.Where(a => a.Id.Equals(true) && (a.Title.Equals("x") || a.Title.Equals("y")) && a.Clicks.Equals(1)).ToSql();
 | 
				
			||||||
 | 
								var sqltmp3 = select.Where(a => a.Id == 0).Where(a => ((a.Title == "x" && a.Title == "z") || a.Title == "y")).ToSql();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
								//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
			var query = select.Where(a => a.Id == 10);
 | 
								var query = select.Where(a => a.Id == 10);
 | 
				
			||||||
@@ -446,7 +447,7 @@ namespace FreeSql.Tests.SqlServer {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			query = select.Where(a => a.Id == 10 && a.Id > 10 || a.Clicks > 100);
 | 
								query = select.Where(a => a.Id == 10 && a.Id > 10 || a.Clicks > 100);
 | 
				
			||||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
								sql = query.ToSql().Replace("\r\n", "");
 | 
				
			||||||
			Assert.Equal("SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a WHERE ((a.[Id] = 10 AND a.[Id] > 10 OR a.[Clicks] > 100))", sql);
 | 
								Assert.Equal("SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a WHERE (((a.[Id] = 10 AND a.[Id] > 10) OR (a.[Clicks] > 100)))", sql);
 | 
				
			||||||
			query.ToList();
 | 
								query.ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			query = select.Where(a => a.Id == 10).Where(a => a.Clicks > 100);
 | 
								query = select.Where(a => a.Id == 10).Where(a => a.Clicks > 100);
 | 
				
			||||||
@@ -509,7 +510,7 @@ namespace FreeSql.Tests.SqlServer {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			query = select.WhereIf(true, a => a.Id == 10 && a.Id > 10 || a.Clicks > 100);
 | 
								query = select.WhereIf(true, a => a.Id == 10 && a.Id > 10 || a.Clicks > 100);
 | 
				
			||||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
								sql = query.ToSql().Replace("\r\n", "");
 | 
				
			||||||
			Assert.Equal("SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a WHERE ((a.[Id] = 10 AND a.[Id] > 10 OR a.[Clicks] > 100))", sql);
 | 
								Assert.Equal("SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a WHERE (((a.[Id] = 10 AND a.[Id] > 10) OR (a.[Clicks] > 100)))", sql);
 | 
				
			||||||
			query.ToList();
 | 
								query.ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			query = select.WhereIf(true, a => a.Id == 10).WhereIf(true, a => a.Clicks > 100);
 | 
								query = select.WhereIf(true, a => a.Id == 10).WhereIf(true, a => a.Clicks > 100);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -381,6 +381,7 @@ namespace FreeSql.Tests.Sqlite {
 | 
				
			|||||||
		public void Where() {
 | 
							public void Where() {
 | 
				
			||||||
			var sqltmp1 = select.Where(a => a.Id == 0 && (a.Title == "x" || a.Title == "y") && a.Clicks == 1).ToSql();
 | 
								var sqltmp1 = select.Where(a => a.Id == 0 && (a.Title == "x" || a.Title == "y") && a.Clicks == 1).ToSql();
 | 
				
			||||||
			var sqltmp2 = select.Where(a => a.Id.Equals(true) && (a.Title.Equals("x") || a.Title.Equals("y")) && a.Clicks.Equals(1)).ToSql();
 | 
								var sqltmp2 = select.Where(a => a.Id.Equals(true) && (a.Title.Equals("x") || a.Title.Equals("y")) && a.Clicks.Equals(1)).ToSql();
 | 
				
			||||||
 | 
								var sqltmp3 = select.Where(a => a.Id == 0).Where(a => ((a.Title == "x" && a.Title == "z") || a.Title == "y")).ToSql();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
								//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
			var query = select.Where(a => a.Id == 10);
 | 
								var query = select.Where(a => a.Id == 10);
 | 
				
			||||||
@@ -390,7 +391,7 @@ namespace FreeSql.Tests.Sqlite {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			query = select.Where(a => a.Id == 10 && a.Id > 10 || a.Clicks > 100);
 | 
								query = select.Where(a => a.Id == 10 && a.Id > 10 || a.Clicks > 100);
 | 
				
			||||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
								sql = query.ToSql().Replace("\r\n", "");
 | 
				
			||||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TypeGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a WHERE ((a.\"Id\" = 10 AND a.\"Id\" > 10 OR a.\"Clicks\" > 100))", sql);
 | 
								Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TypeGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a WHERE (((a.\"Id\" = 10 AND a.\"Id\" > 10) OR (a.\"Clicks\" > 100)))", sql);
 | 
				
			||||||
			query.ToList();
 | 
								query.ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			query = select.Where(a => a.Id == 10).Where(a => a.Clicks > 100);
 | 
								query = select.Where(a => a.Id == 10).Where(a => a.Clicks > 100);
 | 
				
			||||||
@@ -453,7 +454,7 @@ namespace FreeSql.Tests.Sqlite {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			query = select.WhereIf(true, a => a.Id == 10 && a.Id > 10 || a.Clicks > 100);
 | 
								query = select.WhereIf(true, a => a.Id == 10 && a.Id > 10 || a.Clicks > 100);
 | 
				
			||||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
								sql = query.ToSql().Replace("\r\n", "");
 | 
				
			||||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TypeGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a WHERE ((a.\"Id\" = 10 AND a.\"Id\" > 10 OR a.\"Clicks\" > 100))", sql);
 | 
								Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TypeGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a WHERE (((a.\"Id\" = 10 AND a.\"Id\" > 10) OR (a.\"Clicks\" > 100)))", sql);
 | 
				
			||||||
			query.ToList();
 | 
								query.ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			query = select.WhereIf(true, a => a.Id == 10).WhereIf(true, a => a.Clicks > 100);
 | 
								query = select.WhereIf(true, a => a.Id == 10).WhereIf(true, a => a.Clicks > 100);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -86,8 +86,35 @@ namespace FreeSql.Tests {
 | 
				
			|||||||
			public abstract Task Persistent();
 | 
								public abstract Task Persistent();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public class Model1 {
 | 
				
			||||||
 | 
								[Column(IsIdentity = true)]
 | 
				
			||||||
 | 
								public int id { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								public string title { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								public ICollection<Model2> Childs { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public class Model2 {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								[Column(IsIdentity = true)]
 | 
				
			||||||
 | 
								public int id { get; set; }
 | 
				
			||||||
 | 
								public string title { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								public Model1 Parent { get; set; }
 | 
				
			||||||
 | 
								public int parent_id { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		[Fact]
 | 
							[Fact]
 | 
				
			||||||
		public void Test1() {
 | 
							public void Test1() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								var ttt1 = g.sqlite.Select<Model1>().Where(a => a.Childs.AsSelect().Any(b => b.title == "111")).ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			var linqto1 = 
 | 
								var linqto1 = 
 | 
				
			||||||
				from p in g.sqlite.Select<Order>()
 | 
									from p in g.sqlite.Select<Order>()
 | 
				
			||||||
				where p.Id >= 0
 | 
									where p.Id >= 0
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	<PropertyGroup>
 | 
						<PropertyGroup>
 | 
				
			||||||
		<TargetFramework>netstandard2.0</TargetFramework>
 | 
							<TargetFramework>netstandard2.0</TargetFramework>
 | 
				
			||||||
		<Version>0.5.9</Version>
 | 
							<Version>0.5.10</Version>
 | 
				
			||||||
		<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
 | 
							<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
 | 
				
			||||||
		<Authors>YeXiangQin</Authors>
 | 
							<Authors>YeXiangQin</Authors>
 | 
				
			||||||
		<Description>FreeSql is the most convenient ORM in dotnet. It supports Mysql, Postgresql, SqlServer, Oracle and Sqlite.</Description>
 | 
							<Description>FreeSql is the most convenient ORM in dotnet. It supports Mysql, Postgresql, SqlServer, Oracle and Sqlite.</Description>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -868,7 +868,7 @@ namespace FreeSql.Internal {
 | 
				
			|||||||
				case ExpressionType.Coalesce:
 | 
									case ExpressionType.Coalesce:
 | 
				
			||||||
					return _common.IsNull(ExpressionLambdaToSql(expBinary.Left, tsc), ExpressionLambdaToSql(expBinary.Right, tsc));
 | 
										return _common.IsNull(ExpressionLambdaToSql(expBinary.Left, tsc), ExpressionLambdaToSql(expBinary.Right, tsc));
 | 
				
			||||||
				case ExpressionType.OrElse:
 | 
									case ExpressionType.OrElse:
 | 
				
			||||||
					return $"({ExpressionLambdaToSql(expBinary.Left, tsc)} OR {ExpressionLambdaToSql(expBinary.Right, tsc)})";
 | 
										return $"(({ExpressionLambdaToSql(expBinary.Left, tsc)}) OR ({ExpressionLambdaToSql(expBinary.Right, tsc)}))";
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if (dicExpressionOperator.TryGetValue(expBinary.NodeType, out var tryoper) == false) return "";
 | 
								if (dicExpressionOperator.TryGetValue(expBinary.NodeType, out var tryoper) == false) return "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user