- 修复 高版本编译器下 Pgsql 数组字段 Contains 解析问题;#2152

This commit is contained in:
2881099
2025-11-21 20:30:09 +08:00
parent e7961d006c
commit e26bafdd05
7 changed files with 23 additions and 7 deletions

View File

@@ -248,6 +248,13 @@ namespace System.Linq.Expressions
return test.Result;
}
public static bool IsReadonlySpanOp_Implicit(this Expression exp)
{
return exp.NodeType == ExpressionType.Call &&
exp is MethodCallExpression exp3 &&
exp3.Type.Name == "ReadOnlySpan`1" && exp3.Method.Name == "op_Implicit" && exp3.Arguments.Count == 1;
}
static ConcurrentDictionary<Type, ConcurrentDictionary<string, MethodInfo>> _dicTypeMethod = new ConcurrentDictionary<Type, ConcurrentDictionary<string, MethodInfo>>();
public static bool IsStringJoin(this MethodCallExpression exp, out Expression tolistObjectExpOut, out MethodInfo toListMethodOut, out LambdaExpression toListArgs0Out)
{

View File

@@ -1137,8 +1137,7 @@ namespace FreeSql.Internal
}
case ExpressionType.Call:
var exp3 = exp as MethodCallExpression;
if (exp3.Type.Name == "ReadOnlySpan`1" && exp3.Method.Name == "op_Implicit" && exp3.Arguments.Count == 1)
return ExpressionLambdaToSql(exp3.Arguments[0], tsc);
if (exp3.IsReadonlySpanOp_Implicit()) return ExpressionLambdaToSql(exp3.Arguments[0], tsc);
if (!tsc.isNotSetMapColumnTmp) tsc.mapType = null;
if (exp3.IsExpressionCall())
{

View File

@@ -213,7 +213,9 @@ namespace FreeSql.Custom.PostgreSQL
else args1 = $"array[{args1}]";
if (objExp != null)
{
var dbinfo = _common._orm.CodeFirst.GetDbInfo(objExp.Type);
var dbinfo = _common._orm.CodeFirst.GetDbInfo(
objExp.IsReadonlySpanOp_Implicit() ? (objExp as MethodCallExpression).Arguments[0].Type :
objExp.Type);
if (dbinfo != null) args1 = $"{args1}::{dbinfo.dbtype}";
}
return $"({left} @> {args1})";

View File

@@ -244,7 +244,9 @@ namespace FreeSql.KingbaseES
else args1 = $"array[{args1}]";
if (objExp != null)
{
var dbinfo = _common._orm.CodeFirst.GetDbInfo(objExp.Type);
var dbinfo = _common._orm.CodeFirst.GetDbInfo(
objExp.IsReadonlySpanOp_Implicit() ? (objExp as MethodCallExpression).Arguments[0].Type :
objExp.Type);
if (dbinfo != null) args1 = $"{args1}::{dbinfo.dbtype}";
}
return $"({left} @> {args1})";

View File

@@ -213,7 +213,9 @@ namespace FreeSql.Odbc.PostgreSQL
else args1 = $"array[{args1}]";
if (objExp != null)
{
var dbinfo = _common._orm.CodeFirst.GetDbInfo(objExp.Type);
var dbinfo = _common._orm.CodeFirst.GetDbInfo(
objExp.IsReadonlySpanOp_Implicit() ? (objExp as MethodCallExpression).Arguments[0].Type :
objExp.Type);
if (dbinfo != null) args1 = $"{args1}::{dbinfo.dbtype}";
}
return $"({left} @> {args1})";

View File

@@ -244,7 +244,9 @@ namespace FreeSql.PostgreSQL
else args1 = $"array[{args1}]";
if (objExp != null)
{
var dbinfo = _common._orm.CodeFirst.GetDbInfo(objExp.Type);
var dbinfo = _common._orm.CodeFirst.GetDbInfo(
objExp.IsReadonlySpanOp_Implicit() ? (objExp as MethodCallExpression).Arguments[0].Type :
objExp.Type);
if (dbinfo != null) args1 = $"{args1}::{dbinfo.dbtype}";
}
return $"({left} @> {args1})";

View File

@@ -195,7 +195,9 @@ namespace FreeSql.ShenTong
else args1 = $"array[{args1}]";
if (objExp != null)
{
var dbinfo = _common._orm.CodeFirst.GetDbInfo(objExp.Type);
var dbinfo = _common._orm.CodeFirst.GetDbInfo(
objExp.IsReadonlySpanOp_Implicit() ? (objExp as MethodCallExpression).Arguments[0].Type :
objExp.Type);
if (dbinfo != null) args1 = $"{args1}::{dbinfo.dbtype}";
}
return $"({left} @> {args1})";