From 4fc2cb55b7d0c082e3bd19d733ab3352cad8a0f6 Mon Sep 17 00:00:00 2001 From: Christopher Jolly Date: Sun, 8 Oct 2023 01:31:49 +0800 Subject: [PATCH] Extract column expression from UnaryExpression as well --- .../Sql/Internal/JetQuerySqlGenerator.cs | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/EFCore.Jet/Query/Sql/Internal/JetQuerySqlGenerator.cs b/src/EFCore.Jet/Query/Sql/Internal/JetQuerySqlGenerator.cs index 90feaf7..45a8fe4 100644 --- a/src/EFCore.Jet/Query/Sql/Internal/JetQuerySqlGenerator.cs +++ b/src/EFCore.Jet/Query/Sql/Internal/JetQuerySqlGenerator.cs @@ -165,7 +165,20 @@ namespace EntityFrameworkCore.Jet.Query.Sql.Internal if (tableExpression is InnerJoinExpression expression) { SqlBinaryExpression? binaryJoin = expression.JoinPredicate as SqlBinaryExpression; - tempcolexp = ExtractColumnExpressions(binaryJoin!); + SqlUnaryExpression? unaryJoin = expression.JoinPredicate as SqlUnaryExpression; + if (binaryJoin != null) + { + tempcolexp = ExtractColumnExpressions(binaryJoin!); + } + else if (unaryJoin != null) + { + tempcolexp = ExtractColumnExpressions(unaryJoin!); + } + else + { + tempcolexp = new List(); + } + bool refrencesfirsttable = false; foreach (ColumnExpression col in tempcolexp) { @@ -316,6 +329,20 @@ namespace EntityFrameworkCore.Jet.Query.Sql.Internal return result; } + private List ExtractColumnExpressions(SqlUnaryExpression unaryexp) + { + List result = new List(); + if (unaryexp.Operand is SqlBinaryExpression left) + { + result.AddRange(ExtractColumnExpressions(left)); + } + else if (unaryexp.Operand is ColumnExpression colLeft) + { + result.Add(colLeft); + } + + return result; + } protected override Expression VisitProjection(ProjectionExpression projectionExpression) {