diff --git a/src/EFCore.Relational/Query/SqlExpressions/SelectExpression.cs b/src/EFCore.Relational/Query/SqlExpressions/SelectExpression.cs index c727535c53c..2caa9a31df1 100644 --- a/src/EFCore.Relational/Query/SqlExpressions/SelectExpression.cs +++ b/src/EFCore.Relational/Query/SqlExpressions/SelectExpression.cs @@ -108,7 +108,9 @@ public bool IsNonComposedFromSql() && Tables[0] is FromSqlExpression fromSql && Projection.All( pe => pe.Expression is ColumnExpression column - && string.Equals(fromSql.Alias, column.Table.Alias, StringComparison.OrdinalIgnoreCase)); + && string.Equals(fromSql.Alias, column.Table.Alias, StringComparison.OrdinalIgnoreCase)) + && _projectionMapping.TryGetValue(new ProjectionMember(), out var mapping) + && mapping.Type == typeof(Dictionary); public void ApplyProjection() { diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/FromSqlQuerySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/FromSqlQuerySqlServerTest.cs index db766652466..2138b7acc9d 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/FromSqlQuerySqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/FromSqlQuerySqlServerTest.cs @@ -396,15 +396,14 @@ public override void FromSqlRaw_queryable_simple_projection_composed() { base.FromSqlRaw_queryable_simple_projection_composed(); - // issue #16079 - // AssertSql( - // @"SELECT [p].[ProductName] - //FROM ( - // SELECT * - // FROM ""Products"" - // WHERE ""Discontinued"" <> CAST(1 AS bit) - // AND ((""UnitsInStock"" + ""UnitsOnOrder"") < ""ReorderLevel"") - //) AS [p]"); + AssertSql( + @"SELECT [p].[ProductName] +FROM ( + SELECT * + FROM ""Products"" + WHERE ""Discontinued"" <> CAST(1 AS bit) + AND ((""UnitsInStock"" + ""UnitsOnOrder"") < ""ReorderLevel"") +) AS [p]"); } public override void FromSqlRaw_queryable_simple_include()