From af153295f8b6a14b429369b272df21a7c2fcfe7e Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Fri, 31 Jul 2020 02:28:37 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E5=A2=9E=E5=8A=A0=20"x1".First/FirstOrDefa?= =?UTF-8?q?ult=20=E8=A1=A8=E8=BE=BE=E5=BC=8F=E5=87=BD=E6=95=B0=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MySqlConnectorExpression/StringTest.cs | 13 +++++++++++++ .../Dameng/DamengExpression/StringTest.cs | 13 +++++++++++++ .../Default/OdbcExpression/StringTest.cs | 13 +++++++++++++ .../KingbaseES/KingbaseESExpression/StringTest.cs | 13 +++++++++++++ .../MySql/MySqlExpression/StringTest.cs | 13 +++++++++++++ .../Oracle/OracleExpression/StringTest.cs | 13 +++++++++++++ .../PostgreSQL/PostgreSQLExpression/StringTest.cs | 13 +++++++++++++ .../SqlServer/SqlServerExpression/StringTest.cs | 13 +++++++++++++ .../Dameng/DamengExpression/StringTest.cs | 13 +++++++++++++ .../DataContext/SqlServer/SqlServerFixture.cs | 2 +- .../MsAccess/MsAccessExpression/StringTest.cs | 13 +++++++++++++ .../MySql/MySqlExpression/StringTest.cs | 13 +++++++++++++ .../Oracle/OracleExpression/StringTest.cs | 13 +++++++++++++ .../PostgreSQL/PostgreSQLExpression/StringTest.cs | 13 +++++++++++++ .../ShenTong/ShenTongExpression/StringTest.cs | 13 +++++++++++++ .../SqlServer/SqlServerExpression/StringTest.cs | 14 ++++++++++++++ .../Sqlite/SqliteExpression/StringTest.cs | 13 +++++++++++++ FreeSql/Internal/CommonExpression.cs | 4 ++++ .../FreeSql.Provider.Dameng/DamengExpression.cs | 10 ++++++++++ .../MsAccessExpression.cs | 10 ++++++++++ .../FreeSql.Provider.MySql/MySqlExpression.cs | 10 ++++++++++ .../Dameng/OdbcDamengExpression.cs | 10 ++++++++++ .../Default/OdbcExpression.cs | 10 ++++++++++ .../KingbaseES/OdbcKingbaseESExpression.cs | 10 ++++++++++ .../MySql/OdbcMySqlExpression.cs | 10 ++++++++++ .../Oracle/OdbcOracleExpression.cs | 10 ++++++++++ .../PostgreSQL/OdbcPostgreSQLExpression.cs | 10 ++++++++++ .../SqlServer/OdbcSqlServerExpression.cs | 10 ++++++++++ .../FreeSql.Provider.Oracle/OracleExpression.cs | 10 ++++++++++ .../PostgreSQLExpression.cs | 10 ++++++++++ .../ShenTongExpression.cs | 10 ++++++++++ .../SqlServerExpression.cs | 10 ++++++++++ .../FreeSql.Provider.Sqlite/SqliteExpression.cs | 10 ++++++++++ 33 files changed, 364 insertions(+), 1 deletion(-) diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorExpression/StringTest.cs index 99f276bbd..9ebf65b31 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorExpression/StringTest.cs @@ -52,6 +52,19 @@ namespace FreeSql.Tests.MySqlConnectorExpression list.Add(g.mysql.Select().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() { diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengExpression/StringTest.cs index fd7682f36..4dfa9e9d4 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengExpression/StringTest.cs @@ -50,6 +50,19 @@ namespace FreeSql.Tests.Odbc.DamengExpression list.Add(g.dameng.Select().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() { diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/OdbcExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/OdbcExpression/StringTest.cs index b88748f6c..19b84f34d 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/OdbcExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/OdbcExpression/StringTest.cs @@ -50,6 +50,19 @@ namespace FreeSql.Tests.Odbc.DefaultExpression list.Add(g.odbc.Select().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() { diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/KingbaseESExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/KingbaseESExpression/StringTest.cs index 37b61702e..faa481b1e 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/KingbaseESExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/KingbaseESExpression/StringTest.cs @@ -50,6 +50,19 @@ namespace FreeSql.Tests.Odbc.KingbaseESExpression list.Add(g.kingbaseES.Select().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() { diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlExpression/StringTest.cs index de5d5cc99..61b5db83c 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlExpression/StringTest.cs @@ -52,6 +52,19 @@ namespace FreeSql.Tests.Odbc.MySqlExpression list.Add(g.mysql.Select().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() { diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleExpression/StringTest.cs index d50783781..d5d4cdee3 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleExpression/StringTest.cs @@ -50,6 +50,19 @@ namespace FreeSql.Tests.Odbc.OracleExpression list.Add(g.oracle.Select().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() { diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLExpression/StringTest.cs index f8fec8505..4105eea90 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLExpression/StringTest.cs @@ -50,6 +50,19 @@ namespace FreeSql.Tests.Odbc.PostgreSQLExpression list.Add(g.pgsql.Select().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() { diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerExpression/StringTest.cs index 8f23765d6..82a5d84d2 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerExpression/StringTest.cs @@ -51,6 +51,19 @@ namespace FreeSql.Tests.Odbc.SqlServerExpression list.Add(g.sqlserver.Select().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() { diff --git a/FreeSql.Tests/FreeSql.Tests/Dameng/DamengExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/Dameng/DamengExpression/StringTest.cs index 0ac241665..139555bc2 100644 --- a/FreeSql.Tests/FreeSql.Tests/Dameng/DamengExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Dameng/DamengExpression/StringTest.cs @@ -50,6 +50,19 @@ namespace FreeSql.Tests.DamengExpression list.Add(g.dameng.Select().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() { diff --git a/FreeSql.Tests/FreeSql.Tests/DataContext/SqlServer/SqlServerFixture.cs b/FreeSql.Tests/FreeSql.Tests/DataContext/SqlServer/SqlServerFixture.cs index 4cdefe0c7..3177a2150 100644 --- a/FreeSql.Tests/FreeSql.Tests/DataContext/SqlServer/SqlServerFixture.cs +++ b/FreeSql.Tests/FreeSql.Tests/DataContext/SqlServer/SqlServerFixture.cs @@ -42,7 +42,7 @@ namespace FreeSql.Tests.DataContext.SqlServer "TestTypeParentInfo23123", "xxdkdkdk1222", "xxx"}; foreach (var tempTable in tempTables) { - DeleteTmpTable(dataTables, tempTable); + //DeleteTmpTable(dataTables, tempTable); } } diff --git a/FreeSql.Tests/FreeSql.Tests/MsAccess/MsAccessExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/MsAccess/MsAccessExpression/StringTest.cs index 7db328430..e4639294f 100644 --- a/FreeSql.Tests/FreeSql.Tests/MsAccess/MsAccessExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/MsAccess/MsAccessExpression/StringTest.cs @@ -50,6 +50,19 @@ namespace FreeSql.Tests.MsAccessExpression list.Add(g.msaccess.Select().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() { diff --git a/FreeSql.Tests/FreeSql.Tests/MySql/MySqlExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/MySql/MySqlExpression/StringTest.cs index cb7f4e17f..bafb962a1 100644 --- a/FreeSql.Tests/FreeSql.Tests/MySql/MySqlExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/MySql/MySqlExpression/StringTest.cs @@ -52,6 +52,19 @@ namespace FreeSql.Tests.MySqlExpression list.Add(g.mysql.Select().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() { diff --git a/FreeSql.Tests/FreeSql.Tests/Oracle/OracleExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/Oracle/OracleExpression/StringTest.cs index 6a63b551b..aff45a188 100644 --- a/FreeSql.Tests/FreeSql.Tests/Oracle/OracleExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Oracle/OracleExpression/StringTest.cs @@ -50,6 +50,19 @@ namespace FreeSql.Tests.OracleExpression list.Add(g.oracle.Select().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() { diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/StringTest.cs index 1a284e3bb..4b0b9fead 100644 --- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/StringTest.cs @@ -50,6 +50,19 @@ namespace FreeSql.Tests.PostgreSQLExpression list.Add(g.pgsql.Select().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() { diff --git a/FreeSql.Tests/FreeSql.Tests/ShenTong/ShenTongExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/ShenTong/ShenTongExpression/StringTest.cs index 55a89bfac..fc4fd9da0 100644 --- a/FreeSql.Tests/FreeSql.Tests/ShenTong/ShenTongExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/ShenTong/ShenTongExpression/StringTest.cs @@ -50,6 +50,19 @@ namespace FreeSql.Tests.ShenTongExpression list.Add(g.shentong.Select().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() { diff --git a/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerExpression/StringTest.cs index 3e36a8cfc..c261353e3 100644 --- a/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerExpression/StringTest.cs @@ -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() { diff --git a/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteExpression/StringTest.cs index bb4dcf584..9bb2a1e75 100644 --- a/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteExpression/StringTest.cs @@ -50,6 +50,19 @@ namespace FreeSql.Tests.SqliteExpression list.Add(g.sqlite.Select().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() { diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index f27f2600f..5f6fb7eaf 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -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) diff --git a/Providers/FreeSql.Provider.Dameng/DamengExpression.cs b/Providers/FreeSql.Provider.Dameng/DamengExpression.cs index aa59c52a2..669d2bc5d 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengExpression.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengExpression.cs @@ -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()) diff --git a/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs b/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs index 7f0756186..0de463bce 100644 --- a/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs +++ b/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs @@ -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()) diff --git a/Providers/FreeSql.Provider.MySql/MySqlExpression.cs b/Providers/FreeSql.Provider.MySql/MySqlExpression.cs index 8db4fbded..7968d10ee 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlExpression.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlExpression.cs @@ -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()) diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengExpression.cs b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengExpression.cs index 4f1b6a132..439dbd20b 100644 --- a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengExpression.cs @@ -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()) diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcExpression.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcExpression.cs index df861404f..673f5f52d 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/OdbcExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcExpression.cs @@ -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()) diff --git a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESExpression.cs b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESExpression.cs index 622bb403e..12be160a4 100644 --- a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESExpression.cs @@ -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()) diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs index 2225443a5..af5ed6889 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs @@ -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()) diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs index 6526cf704..21ac435ce 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs @@ -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()) diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs index 625f06d84..cf939b593 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs @@ -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()) diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs index f9ff49cff..ed2ef297a 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs @@ -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()) diff --git a/Providers/FreeSql.Provider.Oracle/OracleExpression.cs b/Providers/FreeSql.Provider.Oracle/OracleExpression.cs index 25233bcaf..3daf210de 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleExpression.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleExpression.cs @@ -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()) diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs index cc445d6fc..99b46cb3d 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs @@ -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()) diff --git a/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs b/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs index 00bf94d8b..b8c3d1795 100644 --- a/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs +++ b/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs @@ -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()) diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs index c81e40aaf..e0a877628 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs @@ -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()) diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs b/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs index 18b5e4ad7..14280137f 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs @@ -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())