mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 01:05:27 +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());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [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]
 | 
			
		||||
        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());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [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]
 | 
			
		||||
        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());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [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]
 | 
			
		||||
        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());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [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]
 | 
			
		||||
        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());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [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]
 | 
			
		||||
        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());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [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]
 | 
			
		||||
        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());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [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]
 | 
			
		||||
        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());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [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]
 | 
			
		||||
        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());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [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]
 | 
			
		||||
        public void Format()
 | 
			
		||||
        {
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ namespace FreeSql.Tests.DataContext.SqlServer
 | 
			
		||||
                "TestTypeParentInfo23123", "xxdkdkdk1222", "xxx"};
 | 
			
		||||
            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());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [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]
 | 
			
		||||
        public void Format()
 | 
			
		||||
        {
 | 
			
		||||
 
 | 
			
		||||
@@ -52,6 +52,19 @@ namespace FreeSql.Tests.MySqlExpression
 | 
			
		||||
            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]
 | 
			
		||||
        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());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [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]
 | 
			
		||||
        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());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [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]
 | 
			
		||||
        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());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [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]
 | 
			
		||||
        public void Format()
 | 
			
		||||
        {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
using FreeSql.DataAnnotations;
 | 
			
		||||
using FreeSql.Tests.DataContext.SqlServer;
 | 
			
		||||
using Microsoft.EntityFrameworkCore.Internal;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
@@ -65,6 +66,19 @@ namespace FreeSql.Tests.SqlServerExpression
 | 
			
		||||
            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]
 | 
			
		||||
        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());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [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]
 | 
			
		||||
        public void Format()
 | 
			
		||||
        {
 | 
			
		||||
 
 | 
			
		||||
@@ -41,6 +41,7 @@ namespace FreeSql.Internal
 | 
			
		||||
                    field.Append(", ").Append(parent.DbField);
 | 
			
		||||
                    if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
 | 
			
		||||
                    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;
 | 
			
		||||
                case ExpressionType.Convert: return ReadAnonymousField(_tables, field, parent, ref index, (exp as UnaryExpression)?.Operand, getSelectGroupingMapString, whereCascadeExpression, isAllDtoMap);
 | 
			
		||||
                case ExpressionType.Constant:
 | 
			
		||||
@@ -60,6 +61,7 @@ namespace FreeSql.Internal
 | 
			
		||||
                    field.Append(", ").Append(parent.DbField);
 | 
			
		||||
                    if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
 | 
			
		||||
                    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;
 | 
			
		||||
                case ExpressionType.Call:
 | 
			
		||||
                    var callExp = exp as MethodCallExpression;
 | 
			
		||||
@@ -77,6 +79,7 @@ namespace FreeSql.Internal
 | 
			
		||||
                    field.Append(", ").Append(parent.DbField);
 | 
			
		||||
                    if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
 | 
			
		||||
                    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;
 | 
			
		||||
                case ExpressionType.Parameter:
 | 
			
		||||
                case ExpressionType.MemberAccess:
 | 
			
		||||
@@ -262,6 +265,7 @@ namespace FreeSql.Internal
 | 
			
		||||
            field.Append(", ").Append(parent.DbField);
 | 
			
		||||
            if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
 | 
			
		||||
            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;
 | 
			
		||||
        }
 | 
			
		||||
        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();
 | 
			
		||||
                        objType = objExp?.Type;
 | 
			
		||||
                        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.IsArrayOrList())
 | 
			
		||||
 
 | 
			
		||||
@@ -70,6 +70,16 @@ namespace FreeSql.MsAccess
 | 
			
		||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
			
		||||
                        objType = objExp?.Type;
 | 
			
		||||
                        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.IsArrayOrList())
 | 
			
		||||
 
 | 
			
		||||
@@ -98,6 +98,16 @@ namespace FreeSql.MySql
 | 
			
		||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
			
		||||
                        objType = objExp?.Type;
 | 
			
		||||
                        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.IsArrayOrList())
 | 
			
		||||
 
 | 
			
		||||
@@ -100,6 +100,16 @@ namespace FreeSql.Odbc.Dameng
 | 
			
		||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
			
		||||
                        objType = objExp?.Type;
 | 
			
		||||
                        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.IsArrayOrList())
 | 
			
		||||
 
 | 
			
		||||
@@ -104,6 +104,16 @@ namespace FreeSql.Odbc.Default
 | 
			
		||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
			
		||||
                        objType = objExp?.Type;
 | 
			
		||||
                        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.IsArrayOrList())
 | 
			
		||||
 
 | 
			
		||||
@@ -101,6 +101,16 @@ namespace FreeSql.Odbc.KingbaseES
 | 
			
		||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
			
		||||
                        objType = objExp?.Type;
 | 
			
		||||
                        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.IsArrayOrList())
 | 
			
		||||
 
 | 
			
		||||
@@ -96,6 +96,16 @@ namespace FreeSql.Odbc.MySql
 | 
			
		||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
			
		||||
                        objType = objExp?.Type;
 | 
			
		||||
                        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.IsArrayOrList())
 | 
			
		||||
 
 | 
			
		||||
@@ -100,6 +100,16 @@ namespace FreeSql.Odbc.Oracle
 | 
			
		||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
			
		||||
                        objType = objExp?.Type;
 | 
			
		||||
                        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.IsArrayOrList())
 | 
			
		||||
 
 | 
			
		||||
@@ -101,6 +101,16 @@ namespace FreeSql.Odbc.PostgreSQL
 | 
			
		||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
			
		||||
                        objType = objExp?.Type;
 | 
			
		||||
                        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.IsArrayOrList())
 | 
			
		||||
 
 | 
			
		||||
@@ -106,6 +106,16 @@ namespace FreeSql.Odbc.SqlServer
 | 
			
		||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
			
		||||
                        objType = objExp?.Type;
 | 
			
		||||
                        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.IsArrayOrList())
 | 
			
		||||
 
 | 
			
		||||
@@ -100,6 +100,16 @@ namespace FreeSql.Oracle
 | 
			
		||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
			
		||||
                        objType = objExp?.Type;
 | 
			
		||||
                        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.IsArrayOrList())
 | 
			
		||||
 
 | 
			
		||||
@@ -102,6 +102,16 @@ namespace FreeSql.PostgreSQL
 | 
			
		||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
			
		||||
                        objType = objExp?.Type;
 | 
			
		||||
                        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.IsArrayOrList())
 | 
			
		||||
 
 | 
			
		||||
@@ -101,6 +101,16 @@ namespace FreeSql.ShenTong
 | 
			
		||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
			
		||||
                        objType = objExp?.Type;
 | 
			
		||||
                        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.IsArrayOrList())
 | 
			
		||||
 
 | 
			
		||||
@@ -105,6 +105,16 @@ namespace FreeSql.SqlServer
 | 
			
		||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
			
		||||
                        objType = objExp?.Type;
 | 
			
		||||
                        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.IsArrayOrList())
 | 
			
		||||
 
 | 
			
		||||
@@ -96,6 +96,16 @@ namespace FreeSql.Sqlite
 | 
			
		||||
                        objExp = callExp.Arguments.FirstOrDefault();
 | 
			
		||||
                        objType = objExp?.Type;
 | 
			
		||||
                        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.IsArrayOrList())
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user