From a8d470695cecd16d684eaa1d2d798e09da7184e9 Mon Sep 17 00:00:00 2001 From: Gilson Joanelo Date: Thu, 29 Jan 2026 21:06:57 -0300 Subject: [PATCH] BETWEEN Support --- .../Query/Internal/FbQuerySqlGenerator.cs | 31 +++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/src/FirebirdSql.EntityFrameworkCore.Firebird/Query/Internal/FbQuerySqlGenerator.cs b/src/FirebirdSql.EntityFrameworkCore.Firebird/Query/Internal/FbQuerySqlGenerator.cs index 2e899cea6..1bd0b7bd3 100644 --- a/src/FirebirdSql.EntityFrameworkCore.Firebird/Query/Internal/FbQuerySqlGenerator.cs +++ b/src/FirebirdSql.EntityFrameworkCore.Firebird/Query/Internal/FbQuerySqlGenerator.cs @@ -143,17 +143,23 @@ protected override Expression VisitSqlBinary(SqlBinaryExpression sqlBinaryExpres Sql.Append(")"); return sqlBinaryExpression; } - else + else if (sqlBinaryExpression.OperatorType == ExpressionType.AndAlso) { - return base.VisitSqlBinary(sqlBinaryExpression); - } - - void BooleanToIntegralAndVisit(SqlExpression expression) - { - Sql.Append("IIF("); - Visit(expression); - Sql.Append(", 1, 0)"); + if (sqlBinaryExpression.Left is SqlBinaryExpression left && + sqlBinaryExpression.Right is SqlBinaryExpression right && + left.OperatorType == ExpressionType.GreaterThanOrEqual && + right.OperatorType == ExpressionType.LessThanOrEqual && + left.Left.Equals(right.Left)) + { + Visit(left.Left); + Sql.Append(" BETWEEN "); + Visit(left.Right); + Sql.Append(" AND "); + Visit(right.Right); + return sqlBinaryExpression; + } } + return base.VisitSqlBinary(sqlBinaryExpression); } protected override Expression VisitSqlParameter(SqlParameterExpression sqlParameterExpression) @@ -413,4 +419,11 @@ void GenerateList(IReadOnlyList items, Action generationAction, Action< generationAction(items[i]); } } + + void BooleanToIntegralAndVisit(SqlExpression expression) + { + Sql.Append("IIF("); + Visit(expression); + Sql.Append(", 1, 0)"); + } }