From 0fbd787c3d899f710e6c6f39bac388dfaf6dfe82 Mon Sep 17 00:00:00 2001 From: Smit Patel Date: Mon, 10 Feb 2020 16:13:03 -0800 Subject: [PATCH] Add quirk for issue18299 --- .../Query/SqlExpressionFactory.cs | 45 ++++++++++++------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/src/EFCore.Relational/Query/SqlExpressionFactory.cs b/src/EFCore.Relational/Query/SqlExpressionFactory.cs index 2a1d6979f6a..2a3857e808e 100644 --- a/src/EFCore.Relational/Query/SqlExpressionFactory.cs +++ b/src/EFCore.Relational/Query/SqlExpressionFactory.cs @@ -508,26 +508,41 @@ private void AddConditions( if (!skipJoins) { - var first = true; - - foreach (var foreignKey in linkingFks) + if (AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue18299", out var isEnabled) && isEnabled) { - if (!(entityType.FindOwnership() == foreignKey - && foreignKey.PrincipalEntityType.BaseType == null)) + AddInnerJoin(selectExpression, linkingFks[0], sharingTypes, skipInnerJoins: false); + + foreach (var otherFk in linkingFks.Skip(1)) { - var otherSelectExpression = first - ? selectExpression - : new SelectExpression(entityType); + var otherSelectExpression = new SelectExpression(entityType); - AddInnerJoin(otherSelectExpression, foreignKey, sharingTypes, skipInnerJoins: false); + AddInnerJoin(otherSelectExpression, otherFk, sharingTypes, skipInnerJoins: false); + selectExpression.ApplyUnion(otherSelectExpression, distinct: true); + } + } + else + { + var first = true; - if (first) - { - first = false; - } - else + foreach (var foreignKey in linkingFks) + { + if (!(entityType.FindOwnership() == foreignKey + && foreignKey.PrincipalEntityType.BaseType == null)) { - selectExpression.ApplyUnion(otherSelectExpression, distinct: true); + var otherSelectExpression = first + ? selectExpression + : new SelectExpression(entityType); + + AddInnerJoin(otherSelectExpression, foreignKey, sharingTypes, skipInnerJoins: false); + + if (first) + { + first = false; + } + else + { + selectExpression.ApplyUnion(otherSelectExpression, distinct: true); + } } } }