diff --git a/FreeSql.Tests/FreeSql.Tests/Firebird/FirebirdExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/Firebird/FirebirdExpression/StringTest.cs index b3dceb92..83b41cdc 100644 --- a/FreeSql.Tests/FreeSql.Tests/Firebird/FirebirdExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Firebird/FirebirdExpression/StringTest.cs @@ -53,7 +53,7 @@ namespace FreeSql.Tests.FirebirdExpression [Fact] public void StringJoin() { - var fsql = g.sqlite; + var fsql = g.firebird; fsql.Delete().Where("1=1").ExecuteAffrows(); fsql.Insert(new[] { new StringJoin01 { name = "北京" }, new StringJoin01 { name = "上海" }, new StringJoin01 { name = "深圳" }, }).ExecuteAffrows(); diff --git a/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs b/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs index a625db9d..d534c527 100644 --- a/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs +++ b/FreeSql/Extensions/FreeSqlGlobalExpressionCallExtensions.cs @@ -358,6 +358,11 @@ namespace FreeSql expContext.Result = $"listagg(to_char({expContext.ParsedContent["column"]}),{expContext.ParsedContent["delimiter"]}) within group({orderby})"; return null; } + public static string StringJoinFirebirdList(object column, object delimiter) + { + expContext.Result = $"list({expContext.ParsedContent["column"]},{expContext.ParsedContent["delimiter"]})"; + return null; + } #endregion } } \ No newline at end of file diff --git a/Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs b/Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs index 203022c4..c2f6a1e1 100644 --- a/Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs +++ b/Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs @@ -255,6 +255,20 @@ namespace FreeSql.Firebird //4涓 {} 鏃讹紝Arguments[1] 鍙兘瑙f瀽杩欎釜鍑烘潵锛岀劧鍚庨噷闈㈡槸 NewArray [] var expArgs = expArgsHack.Select(a => $"'||{_common.IsNull(ExpressionLambdaToSql(a, tsc), "''")}||'").ToArray(); return string.Format(ExpressionLambdaToSql(exp.Arguments[0], tsc), expArgs); + case "Join": + if (exp.IsStringJoin(out var tolistObjectExp, out var toListMethod, out var toListArgs1)) + { + var newToListArgs0 = Expression.Call(tolistObjectExp, toListMethod, + Expression.Lambda( + Expression.Call( + typeof(SqlExtExtensions).GetMethod("StringJoinFirebirdList"), + Expression.Convert(toListArgs1.Body, typeof(object)), + Expression.Convert(exp.Arguments[0], typeof(object))), + toListArgs1.Parameters)); + var newToListSql = getExp(newToListArgs0); + return newToListSql; + } + break; } } else