mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 17:20:49 +08:00 
			
		
		
		
	- 增加 "x1".First/FirstOrDefault 表达式函数解析;
This commit is contained in:
		@@ -52,6 +52,19 @@ namespace FreeSql.Tests.MySqlConnectorExpression
 | 
				
			|||||||
            list.Add(g.mysql.Select<TestEqualsGuid>().Where(a => a.IsDeleted.Equals(false)).ToList());
 | 
					            list.Add(g.mysql.Select<TestEqualsGuid>().Where(a => a.IsDeleted.Equals(false)).ToList());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void First()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".First()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".First()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void FirstOrDefault()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".FirstOrDefault()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".FirstOrDefault()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void Format()
 | 
					        public void Format()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,6 +50,19 @@ namespace FreeSql.Tests.Odbc.DamengExpression
 | 
				
			|||||||
            list.Add(g.dameng.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
 | 
					            list.Add(g.dameng.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void First()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".First()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".First()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void FirstOrDefault()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".FirstOrDefault()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".FirstOrDefault()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void Format()
 | 
					        public void Format()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,6 +50,19 @@ namespace FreeSql.Tests.Odbc.DefaultExpression
 | 
				
			|||||||
            list.Add(g.odbc.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
 | 
					            list.Add(g.odbc.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void First()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".First()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".First()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void FirstOrDefault()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".FirstOrDefault()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".FirstOrDefault()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void Empty()
 | 
					        public void Empty()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,6 +50,19 @@ namespace FreeSql.Tests.Odbc.KingbaseESExpression
 | 
				
			|||||||
            list.Add(g.kingbaseES.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
 | 
					            list.Add(g.kingbaseES.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void First()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".First()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".First()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void FirstOrDefault()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".FirstOrDefault()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".FirstOrDefault()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void Format()
 | 
					        public void Format()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -52,6 +52,19 @@ namespace FreeSql.Tests.Odbc.MySqlExpression
 | 
				
			|||||||
            list.Add(g.mysql.Select<TestEqualsGuid>().Where(a => a.IsDeleted.Equals(false)).ToList());
 | 
					            list.Add(g.mysql.Select<TestEqualsGuid>().Where(a => a.IsDeleted.Equals(false)).ToList());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void First()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".First()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".First()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void FirstOrDefault()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".FirstOrDefault()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".FirstOrDefault()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void Format()
 | 
					        public void Format()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,6 +50,19 @@ namespace FreeSql.Tests.Odbc.OracleExpression
 | 
				
			|||||||
            list.Add(g.oracle.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
 | 
					            list.Add(g.oracle.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void First()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".First()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".First()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void FirstOrDefault()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".FirstOrDefault()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".FirstOrDefault()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void Format()
 | 
					        public void Format()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,6 +50,19 @@ namespace FreeSql.Tests.Odbc.PostgreSQLExpression
 | 
				
			|||||||
            list.Add(g.pgsql.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
 | 
					            list.Add(g.pgsql.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void First()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".First()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".First()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void FirstOrDefault()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".FirstOrDefault()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".FirstOrDefault()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void Format()
 | 
					        public void Format()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -51,6 +51,19 @@ namespace FreeSql.Tests.Odbc.SqlServerExpression
 | 
				
			|||||||
            list.Add(g.sqlserver.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
 | 
					            list.Add(g.sqlserver.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void First()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".First()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".First()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void FirstOrDefault()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".FirstOrDefault()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".FirstOrDefault()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void Format()
 | 
					        public void Format()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,6 +50,19 @@ namespace FreeSql.Tests.DamengExpression
 | 
				
			|||||||
            list.Add(g.dameng.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
 | 
					            list.Add(g.dameng.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void First()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".First()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".First()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void FirstOrDefault()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".FirstOrDefault()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".FirstOrDefault()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void Format()
 | 
					        public void Format()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,7 +42,7 @@ namespace FreeSql.Tests.DataContext.SqlServer
 | 
				
			|||||||
                "TestTypeParentInfo23123", "xxdkdkdk1222", "xxx"};
 | 
					                "TestTypeParentInfo23123", "xxdkdkdk1222", "xxx"};
 | 
				
			||||||
            foreach (var tempTable in tempTables)
 | 
					            foreach (var tempTable in tempTables)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                DeleteTmpTable(dataTables, tempTable);
 | 
					                //DeleteTmpTable(dataTables, tempTable);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,6 +50,19 @@ namespace FreeSql.Tests.MsAccessExpression
 | 
				
			|||||||
            list.Add(g.msaccess.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
 | 
					            list.Add(g.msaccess.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void First()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".First()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".First()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void FirstOrDefault()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".FirstOrDefault()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".FirstOrDefault()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void Format()
 | 
					        public void Format()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -52,6 +52,19 @@ namespace FreeSql.Tests.MySqlExpression
 | 
				
			|||||||
            list.Add(g.mysql.Select<TestEqualsGuid>().Where(a => a.IsDeleted.Equals(false)).ToList());
 | 
					            list.Add(g.mysql.Select<TestEqualsGuid>().Where(a => a.IsDeleted.Equals(false)).ToList());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void First()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".First()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".First()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void FirstOrDefault()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".FirstOrDefault()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".FirstOrDefault()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void Format()
 | 
					        public void Format()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,6 +50,19 @@ namespace FreeSql.Tests.OracleExpression
 | 
				
			|||||||
            list.Add(g.oracle.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
 | 
					            list.Add(g.oracle.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void First()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".First()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".First()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void FirstOrDefault()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".FirstOrDefault()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".FirstOrDefault()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void Format()
 | 
					        public void Format()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,6 +50,19 @@ namespace FreeSql.Tests.PostgreSQLExpression
 | 
				
			|||||||
            list.Add(g.pgsql.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
 | 
					            list.Add(g.pgsql.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void First()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".First()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".First()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void FirstOrDefault()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".FirstOrDefault()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".FirstOrDefault()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void Format()
 | 
					        public void Format()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,6 +50,19 @@ namespace FreeSql.Tests.ShenTongExpression
 | 
				
			|||||||
            list.Add(g.shentong.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
 | 
					            list.Add(g.shentong.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void First()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".First()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".First()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void FirstOrDefault()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".FirstOrDefault()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".FirstOrDefault()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void Format()
 | 
					        public void Format()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
using FreeSql.DataAnnotations;
 | 
					using FreeSql.DataAnnotations;
 | 
				
			||||||
using FreeSql.Tests.DataContext.SqlServer;
 | 
					using FreeSql.Tests.DataContext.SqlServer;
 | 
				
			||||||
 | 
					using Microsoft.EntityFrameworkCore.Internal;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
@@ -65,6 +66,19 @@ namespace FreeSql.Tests.SqlServerExpression
 | 
				
			|||||||
            list.Add(select.Where(a => a.TitleVarchar == "aaa").ToList());
 | 
					            list.Add(select.Where(a => a.TitleVarchar == "aaa").ToList());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void First()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".First()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".First()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void FirstOrDefault()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".FirstOrDefault()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".FirstOrDefault()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void Format()
 | 
					        public void Format()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,6 +50,19 @@ namespace FreeSql.Tests.SqliteExpression
 | 
				
			|||||||
            list.Add(g.sqlite.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
 | 
					            list.Add(g.sqlite.Select<TestEqualsGuid>().Where(a => a.id.Equals(Guid.Empty)).ToList());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void First()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".First()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".First()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void FirstOrDefault()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Assert.Equal('x', select.First(a => "x1".FirstOrDefault()));
 | 
				
			||||||
 | 
					            Assert.Equal('z', select.First(a => "z1".FirstOrDefault()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void Format()
 | 
					        public void Format()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,6 +41,7 @@ namespace FreeSql.Internal
 | 
				
			|||||||
                    field.Append(", ").Append(parent.DbField);
 | 
					                    field.Append(", ").Append(parent.DbField);
 | 
				
			||||||
                    if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
 | 
					                    if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
 | 
				
			||||||
                    else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(_common.FieldAsAlias(parent.CsName));
 | 
					                    else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(_common.FieldAsAlias(parent.CsName));
 | 
				
			||||||
 | 
					                    if (parent.CsType == null) parent.CsType = exp.Type;
 | 
				
			||||||
                    return false;
 | 
					                    return false;
 | 
				
			||||||
                case ExpressionType.Convert: return ReadAnonymousField(_tables, field, parent, ref index, (exp as UnaryExpression)?.Operand, getSelectGroupingMapString, whereCascadeExpression, isAllDtoMap);
 | 
					                case ExpressionType.Convert: return ReadAnonymousField(_tables, field, parent, ref index, (exp as UnaryExpression)?.Operand, getSelectGroupingMapString, whereCascadeExpression, isAllDtoMap);
 | 
				
			||||||
                case ExpressionType.Constant:
 | 
					                case ExpressionType.Constant:
 | 
				
			||||||
@@ -60,6 +61,7 @@ namespace FreeSql.Internal
 | 
				
			|||||||
                    field.Append(", ").Append(parent.DbField);
 | 
					                    field.Append(", ").Append(parent.DbField);
 | 
				
			||||||
                    if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
 | 
					                    if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
 | 
				
			||||||
                    else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(_common.FieldAsAlias(parent.CsName));
 | 
					                    else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(_common.FieldAsAlias(parent.CsName));
 | 
				
			||||||
 | 
					                    if (parent.CsType == null) parent.CsType = exp.Type;
 | 
				
			||||||
                    return false;
 | 
					                    return false;
 | 
				
			||||||
                case ExpressionType.Call:
 | 
					                case ExpressionType.Call:
 | 
				
			||||||
                    var callExp = exp as MethodCallExpression;
 | 
					                    var callExp = exp as MethodCallExpression;
 | 
				
			||||||
@@ -77,6 +79,7 @@ namespace FreeSql.Internal
 | 
				
			|||||||
                    field.Append(", ").Append(parent.DbField);
 | 
					                    field.Append(", ").Append(parent.DbField);
 | 
				
			||||||
                    if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
 | 
					                    if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
 | 
				
			||||||
                    else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(_common.FieldAsAlias(parent.CsName));
 | 
					                    else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(_common.FieldAsAlias(parent.CsName));
 | 
				
			||||||
 | 
					                    if (parent.CsType == null) parent.CsType = exp.Type;
 | 
				
			||||||
                    return false;
 | 
					                    return false;
 | 
				
			||||||
                case ExpressionType.Parameter:
 | 
					                case ExpressionType.Parameter:
 | 
				
			||||||
                case ExpressionType.MemberAccess:
 | 
					                case ExpressionType.MemberAccess:
 | 
				
			||||||
@@ -262,6 +265,7 @@ namespace FreeSql.Internal
 | 
				
			|||||||
            field.Append(", ").Append(parent.DbField);
 | 
					            field.Append(", ").Append(parent.DbField);
 | 
				
			||||||
            if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
 | 
					            if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
 | 
				
			||||||
            else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(_common.FieldAsAlias(parent.CsName));
 | 
					            else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(_common.FieldAsAlias(parent.CsName));
 | 
				
			||||||
 | 
					            if (parent.CsType == null) parent.CsType = exp.Type;
 | 
				
			||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        public object ReadAnonymous(ReadAnonymousTypeInfo parent, DbDataReader dr, ref int index, bool notRead, ReadAnonymousDbValueRef dbValue)
 | 
					        public object ReadAnonymous(ReadAnonymousTypeInfo parent, DbDataReader dr, ref int index, bool notRead, ReadAnonymousDbValueRef dbValue)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -100,6 +100,16 @@ namespace FreeSql.Dameng
 | 
				
			|||||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
					                        objExp = callExp.Arguments.FirstOrDefault();
 | 
				
			||||||
                        objType = objExp?.Type;
 | 
					                        objType = objExp?.Type;
 | 
				
			||||||
                        argIndex++;
 | 
					                        argIndex++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (objType == typeof(string))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            switch (callExp.Method.Name)
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                case "First":
 | 
				
			||||||
 | 
					                                case "FirstOrDefault":
 | 
				
			||||||
 | 
					                                    return $"substr({getExp(callExp.Arguments[0])}, 1, 1)";
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
					                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
				
			||||||
                    if (objType != null || objType.IsArrayOrList())
 | 
					                    if (objType != null || objType.IsArrayOrList())
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -70,6 +70,16 @@ namespace FreeSql.MsAccess
 | 
				
			|||||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
					                        objExp = callExp.Arguments.FirstOrDefault();
 | 
				
			||||||
                        objType = objExp?.Type;
 | 
					                        objType = objExp?.Type;
 | 
				
			||||||
                        argIndex++;
 | 
					                        argIndex++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (objType == typeof(string))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            switch (callExp.Method.Name)
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                case "First":
 | 
				
			||||||
 | 
					                                case "FirstOrDefault":
 | 
				
			||||||
 | 
					                                    return $"left({getExp(callExp.Arguments[0])}, 1)";
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
					                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
				
			||||||
                    if (objType != null || objType.IsArrayOrList())
 | 
					                    if (objType != null || objType.IsArrayOrList())
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -98,6 +98,16 @@ namespace FreeSql.MySql
 | 
				
			|||||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
					                        objExp = callExp.Arguments.FirstOrDefault();
 | 
				
			||||||
                        objType = objExp?.Type;
 | 
					                        objType = objExp?.Type;
 | 
				
			||||||
                        argIndex++;
 | 
					                        argIndex++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (objType == typeof(string))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            switch (callExp.Method.Name)
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                case "First":
 | 
				
			||||||
 | 
					                                case "FirstOrDefault":
 | 
				
			||||||
 | 
					                                    return $"substr({getExp(callExp.Arguments[0])}, 1, 1)";
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
					                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
				
			||||||
                    if (objType != null || objType.IsArrayOrList())
 | 
					                    if (objType != null || objType.IsArrayOrList())
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -100,6 +100,16 @@ namespace FreeSql.Odbc.Dameng
 | 
				
			|||||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
					                        objExp = callExp.Arguments.FirstOrDefault();
 | 
				
			||||||
                        objType = objExp?.Type;
 | 
					                        objType = objExp?.Type;
 | 
				
			||||||
                        argIndex++;
 | 
					                        argIndex++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (objType == typeof(string))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            switch (callExp.Method.Name)
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                case "First":
 | 
				
			||||||
 | 
					                                case "FirstOrDefault":
 | 
				
			||||||
 | 
					                                    return $"substr({getExp(callExp.Arguments[0])}, 1, 1)";
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
					                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
				
			||||||
                    if (objType != null || objType.IsArrayOrList())
 | 
					                    if (objType != null || objType.IsArrayOrList())
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -104,6 +104,16 @@ namespace FreeSql.Odbc.Default
 | 
				
			|||||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
					                        objExp = callExp.Arguments.FirstOrDefault();
 | 
				
			||||||
                        objType = objExp?.Type;
 | 
					                        objType = objExp?.Type;
 | 
				
			||||||
                        argIndex++;
 | 
					                        argIndex++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (objType == typeof(string))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            switch (callExp.Method.Name)
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                case "First":
 | 
				
			||||||
 | 
					                                case "FirstOrDefault":
 | 
				
			||||||
 | 
					                                    return _utils.Adapter.LambdaString_Substring(getExp(callExp.Arguments[0]), "1", "1");
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
					                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
				
			||||||
                    if (objType != null || objType.IsArrayOrList())
 | 
					                    if (objType != null || objType.IsArrayOrList())
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -101,6 +101,16 @@ namespace FreeSql.Odbc.KingbaseES
 | 
				
			|||||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
					                        objExp = callExp.Arguments.FirstOrDefault();
 | 
				
			||||||
                        objType = objExp?.Type;
 | 
					                        objType = objExp?.Type;
 | 
				
			||||||
                        argIndex++;
 | 
					                        argIndex++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (objType == typeof(string))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            switch (callExp.Method.Name)
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                case "First":
 | 
				
			||||||
 | 
					                                case "FirstOrDefault":
 | 
				
			||||||
 | 
					                                    return $"substr({getExp(callExp.Arguments[0])}, 1, 1)";
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
					                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
				
			||||||
                    if (objType != null || objType.IsArrayOrList())
 | 
					                    if (objType != null || objType.IsArrayOrList())
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -96,6 +96,16 @@ namespace FreeSql.Odbc.MySql
 | 
				
			|||||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
					                        objExp = callExp.Arguments.FirstOrDefault();
 | 
				
			||||||
                        objType = objExp?.Type;
 | 
					                        objType = objExp?.Type;
 | 
				
			||||||
                        argIndex++;
 | 
					                        argIndex++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (objType == typeof(string))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            switch (callExp.Method.Name)
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                case "First":
 | 
				
			||||||
 | 
					                                case "FirstOrDefault":
 | 
				
			||||||
 | 
					                                    return $"substr({getExp(callExp.Arguments[0])}, 1, 1)";
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
					                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
				
			||||||
                    if (objType != null || objType.IsArrayOrList())
 | 
					                    if (objType != null || objType.IsArrayOrList())
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -100,6 +100,16 @@ namespace FreeSql.Odbc.Oracle
 | 
				
			|||||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
					                        objExp = callExp.Arguments.FirstOrDefault();
 | 
				
			||||||
                        objType = objExp?.Type;
 | 
					                        objType = objExp?.Type;
 | 
				
			||||||
                        argIndex++;
 | 
					                        argIndex++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (objType == typeof(string))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            switch (callExp.Method.Name)
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                case "First":
 | 
				
			||||||
 | 
					                                case "FirstOrDefault":
 | 
				
			||||||
 | 
					                                    return $"substr({getExp(callExp.Arguments[0])}, 1, 1)";
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
					                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
				
			||||||
                    if (objType != null || objType.IsArrayOrList())
 | 
					                    if (objType != null || objType.IsArrayOrList())
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -101,6 +101,16 @@ namespace FreeSql.Odbc.PostgreSQL
 | 
				
			|||||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
					                        objExp = callExp.Arguments.FirstOrDefault();
 | 
				
			||||||
                        objType = objExp?.Type;
 | 
					                        objType = objExp?.Type;
 | 
				
			||||||
                        argIndex++;
 | 
					                        argIndex++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (objType == typeof(string))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            switch (callExp.Method.Name)
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                case "First":
 | 
				
			||||||
 | 
					                                case "FirstOrDefault":
 | 
				
			||||||
 | 
					                                    return $"substr({getExp(callExp.Arguments[0])}, 1, 1)";
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
					                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
				
			||||||
                    if (objType != null || objType.IsArrayOrList())
 | 
					                    if (objType != null || objType.IsArrayOrList())
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -106,6 +106,16 @@ namespace FreeSql.Odbc.SqlServer
 | 
				
			|||||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
					                        objExp = callExp.Arguments.FirstOrDefault();
 | 
				
			||||||
                        objType = objExp?.Type;
 | 
					                        objType = objExp?.Type;
 | 
				
			||||||
                        argIndex++;
 | 
					                        argIndex++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (objType == typeof(string))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            switch (callExp.Method.Name)
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                case "First":
 | 
				
			||||||
 | 
					                                case "FirstOrDefault":
 | 
				
			||||||
 | 
					                                    return $"substr({getExp(callExp.Arguments[0])}, 1, 1)";
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
					                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
				
			||||||
                    if (objType != null || objType.IsArrayOrList())
 | 
					                    if (objType != null || objType.IsArrayOrList())
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -100,6 +100,16 @@ namespace FreeSql.Oracle
 | 
				
			|||||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
					                        objExp = callExp.Arguments.FirstOrDefault();
 | 
				
			||||||
                        objType = objExp?.Type;
 | 
					                        objType = objExp?.Type;
 | 
				
			||||||
                        argIndex++;
 | 
					                        argIndex++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (objType == typeof(string))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            switch (callExp.Method.Name)
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                case "First":
 | 
				
			||||||
 | 
					                                case "FirstOrDefault":
 | 
				
			||||||
 | 
					                                    return $"substr({getExp(callExp.Arguments[0])}, 1, 1)";
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
					                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
				
			||||||
                    if (objType != null || objType.IsArrayOrList())
 | 
					                    if (objType != null || objType.IsArrayOrList())
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -102,6 +102,16 @@ namespace FreeSql.PostgreSQL
 | 
				
			|||||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
					                        objExp = callExp.Arguments.FirstOrDefault();
 | 
				
			||||||
                        objType = objExp?.Type;
 | 
					                        objType = objExp?.Type;
 | 
				
			||||||
                        argIndex++;
 | 
					                        argIndex++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (objType == typeof(string))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            switch (callExp.Method.Name)
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                case "First":
 | 
				
			||||||
 | 
					                                case "FirstOrDefault":
 | 
				
			||||||
 | 
					                                    return $"substr({getExp(callExp.Arguments[0])}, 1, 1)";
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
					                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
				
			||||||
                    if (objType != null || objType.IsArrayOrList())
 | 
					                    if (objType != null || objType.IsArrayOrList())
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -101,6 +101,16 @@ namespace FreeSql.ShenTong
 | 
				
			|||||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
					                        objExp = callExp.Arguments.FirstOrDefault();
 | 
				
			||||||
                        objType = objExp?.Type;
 | 
					                        objType = objExp?.Type;
 | 
				
			||||||
                        argIndex++;
 | 
					                        argIndex++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (objType == typeof(string))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            switch (callExp.Method.Name)
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                case "First":
 | 
				
			||||||
 | 
					                                case "FirstOrDefault":
 | 
				
			||||||
 | 
					                                    return $"substr({getExp(callExp.Arguments[0])}, 1, 1)";
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
					                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
				
			||||||
                    if (objType != null || objType.IsArrayOrList())
 | 
					                    if (objType != null || objType.IsArrayOrList())
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -105,6 +105,16 @@ namespace FreeSql.SqlServer
 | 
				
			|||||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
					                        objExp = callExp.Arguments.FirstOrDefault();
 | 
				
			||||||
                        objType = objExp?.Type;
 | 
					                        objType = objExp?.Type;
 | 
				
			||||||
                        argIndex++;
 | 
					                        argIndex++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (objType == typeof(string))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            switch (callExp.Method.Name)
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                case "First":
 | 
				
			||||||
 | 
					                                case "FirstOrDefault":
 | 
				
			||||||
 | 
					                                    return $"substring({getExp(callExp.Arguments[0])}, 1, 1)";
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
					                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
				
			||||||
                    if (objType != null || objType.IsArrayOrList())
 | 
					                    if (objType != null || objType.IsArrayOrList())
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -96,6 +96,16 @@ namespace FreeSql.Sqlite
 | 
				
			|||||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
					                        objExp = callExp.Arguments.FirstOrDefault();
 | 
				
			||||||
                        objType = objExp?.Type;
 | 
					                        objType = objExp?.Type;
 | 
				
			||||||
                        argIndex++;
 | 
					                        argIndex++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (objType == typeof(string))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            switch (callExp.Method.Name)
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                case "First":
 | 
				
			||||||
 | 
					                                case "FirstOrDefault":
 | 
				
			||||||
 | 
					                                    return $"substr({getExp(callExp.Arguments[0])}, 1, 1)";
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
					                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
				
			||||||
                    if (objType != null || objType.IsArrayOrList())
 | 
					                    if (objType != null || objType.IsArrayOrList())
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user