mirror of
https://github.com/dotnetcore/FreeSql.git
synced 2026-02-07 00:40:55 +08:00
- 修复 高版本编译器下 Pgsql 数组字段 Contains 解析问题;#2152
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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())
|
||||
{
|
||||
|
||||
@@ -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})";
|
||||
|
||||
@@ -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})";
|
||||
|
||||
@@ -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})";
|
||||
|
||||
@@ -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})";
|
||||
|
||||
@@ -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})";
|
||||
|
||||
Reference in New Issue
Block a user