diff --git a/src/EFCore.Cosmos/Query/Internal/QuerySqlGenerator.cs b/src/EFCore.Cosmos/Query/Internal/QuerySqlGenerator.cs index 2cdb5d45556..986f13cccc6 100644 --- a/src/EFCore.Cosmos/Query/Internal/QuerySqlGenerator.cs +++ b/src/EFCore.Cosmos/Query/Internal/QuerySqlGenerator.cs @@ -247,11 +247,10 @@ protected override Expression VisitSelect(SelectExpression selectExpression) } Visit(selectExpression.FromExpression); - _sqlBuilder.AppendLine(); if (selectExpression.Predicate != null) { - _sqlBuilder.Append("WHERE "); + _sqlBuilder.AppendLine().Append("WHERE "); Visit(selectExpression.Predicate); } diff --git a/src/EFCore.Cosmos/Query/Internal/SqlExpressionFactory.cs b/src/EFCore.Cosmos/Query/Internal/SqlExpressionFactory.cs index cd2f1f47222..84316966024 100644 --- a/src/EFCore.Cosmos/Query/Internal/SqlExpressionFactory.cs +++ b/src/EFCore.Cosmos/Query/Internal/SqlExpressionFactory.cs @@ -525,12 +525,7 @@ public virtual SelectExpression Select(IEntityType entityType) /// doing so can result in application failures when updating to a new Entity Framework Core release. /// public virtual SelectExpression Select(IEntityType entityType, string sql, Expression argument) - { - var selectExpression = new SelectExpression(entityType, sql, argument); - AddDiscriminator(selectExpression, entityType); - - return selectExpression; - } + => new(entityType, sql, argument); private void AddDiscriminator(SelectExpression selectExpression, IEntityType entityType) { diff --git a/test/EFCore.Cosmos.FunctionalTests/Query/FromSqlQueryCosmosTest.cs b/test/EFCore.Cosmos.FunctionalTests/Query/FromSqlQueryCosmosTest.cs index 0dc597d51fa..03a2aeb70bd 100644 --- a/test/EFCore.Cosmos.FunctionalTests/Query/FromSqlQueryCosmosTest.cs +++ b/test/EFCore.Cosmos.FunctionalTests/Query/FromSqlQueryCosmosTest.cs @@ -4,6 +4,7 @@ using System; using System.Linq; using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.TestModels.Northwind; using Microsoft.EntityFrameworkCore.TestUtilities; using Microsoft.EntityFrameworkCore.Utilities; @@ -34,7 +35,7 @@ public async Task FromSqlRaw_queryable_simple(bool async) { using var context = CreateContext(); var query = context.Set() - .FromSqlRaw(@"SELECT * FROM root c WHERE c[""ContactName""] LIKE '%z%'"); + .FromSqlRaw(@"SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer"" AND c[""ContactName""] LIKE '%z%'"); var actual = async ? await query.ToArrayAsync() @@ -46,9 +47,25 @@ public async Task FromSqlRaw_queryable_simple(bool async) AssertSql( @"SELECT c FROM ( - SELECT * FROM root c WHERE c[""ContactName""] LIKE '%z%' -) c -WHERE (c[""Discriminator""] = ""Customer"")"); + SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer"" AND c[""ContactName""] LIKE '%z%' +) c"); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public async Task FromSqlRaw_queryable_incorrect_discriminator_throws(bool async) + { + using var context = CreateContext(); + var query = context.Set() + .FromSqlRaw(@"SELECT * FROM root c WHERE c[""Discriminator""] = ""Order"""); + + var exception = async + ? await Assert.ThrowsAsync(() => query.ToArrayAsync()) + : Assert.Throws(() => query.ToArray()); + + Assert.Equal( + CoreStrings.UnableToDiscriminate(context.Model.FindEntityType(typeof(Customer))!.DisplayName(), "Order"), + exception.Message); } [ConditionalTheory] @@ -57,7 +74,7 @@ public async Task FromSqlRaw_queryable_simple_columns_out_of_order(bool async) { using var context = CreateContext(); var query = context.Set().FromSqlRaw( - @"SELECT c[""id""], c[""Discriminator""], c[""Region""], c[""PostalCode""], c[""Phone""], c[""Fax""], c[""CustomerID""], c[""Country""], c[""ContactTitle""], c[""ContactName""], c[""CompanyName""], c[""City""], c[""Address""] FROM root c"); + @"SELECT c[""id""], c[""Discriminator""], c[""Region""], c[""PostalCode""], c[""Phone""], c[""Fax""], c[""CustomerID""], c[""Country""], c[""ContactTitle""], c[""ContactName""], c[""CompanyName""], c[""City""], c[""Address""] FROM root c WHERE c[""Discriminator""] = ""Customer"""); var actual = async ? await query.ToArrayAsync() @@ -69,9 +86,8 @@ public async Task FromSqlRaw_queryable_simple_columns_out_of_order(bool async) AssertSql( @"SELECT c FROM ( - SELECT c[""id""], c[""Discriminator""], c[""Region""], c[""PostalCode""], c[""Phone""], c[""Fax""], c[""CustomerID""], c[""Country""], c[""ContactTitle""], c[""ContactName""], c[""CompanyName""], c[""City""], c[""Address""] FROM root c -) c -WHERE (c[""Discriminator""] = ""Customer"")"); + SELECT c[""id""], c[""Discriminator""], c[""Region""], c[""PostalCode""], c[""Phone""], c[""Fax""], c[""CustomerID""], c[""Country""], c[""ContactTitle""], c[""ContactName""], c[""CompanyName""], c[""City""], c[""Address""] FROM root c WHERE c[""Discriminator""] = ""Customer"" +) c"); } [ConditionalTheory] @@ -80,7 +96,7 @@ public async Task FromSqlRaw_queryable_simple_columns_out_of_order_and_extra_col { using var context = CreateContext(); var query = context.Set().FromSqlRaw( - @"SELECT c[""id""], c[""Discriminator""], c[""Region""], c[""PostalCode""], c[""PostalCode""] AS Foo, c[""Phone""], c[""Fax""], c[""CustomerID""], c[""Country""], c[""ContactTitle""], c[""ContactName""], c[""CompanyName""], c[""City""], c[""Address""] FROM root c"); + @"SELECT c[""id""], c[""Discriminator""], c[""Region""], c[""PostalCode""], c[""PostalCode""] AS Foo, c[""Phone""], c[""Fax""], c[""CustomerID""], c[""Country""], c[""ContactTitle""], c[""ContactName""], c[""CompanyName""], c[""City""], c[""Address""] FROM root c WHERE c[""Discriminator""] = ""Customer"""); var actual = async ? await query.ToArrayAsync() @@ -92,9 +108,8 @@ public async Task FromSqlRaw_queryable_simple_columns_out_of_order_and_extra_col AssertSql( @"SELECT c FROM ( - SELECT c[""id""], c[""Discriminator""], c[""Region""], c[""PostalCode""], c[""PostalCode""] AS Foo, c[""Phone""], c[""Fax""], c[""CustomerID""], c[""Country""], c[""ContactTitle""], c[""ContactName""], c[""CompanyName""], c[""City""], c[""Address""] FROM root c -) c -WHERE (c[""Discriminator""] = ""Customer"")"); + SELECT c[""id""], c[""Discriminator""], c[""Region""], c[""PostalCode""], c[""PostalCode""] AS Foo, c[""Phone""], c[""Fax""], c[""CustomerID""], c[""Country""], c[""ContactTitle""], c[""ContactName""], c[""CompanyName""], c[""City""], c[""Address""] FROM root c WHERE c[""Discriminator""] = ""Customer"" +) c"); } [ConditionalTheory] @@ -103,7 +118,7 @@ public async Task FromSqlRaw_queryable_composed(bool async) { using var context = CreateContext(); var query = context.Set().FromSqlRaw( - @"SELECT * FROM root c").Where(c => c.ContactName.Contains("z")); + @"SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer""").Where(c => c.ContactName.Contains("z")); var sql = query.ToQueryString(); @@ -117,9 +132,9 @@ public async Task FromSqlRaw_queryable_composed(bool async) AssertSql( @"SELECT c FROM ( - SELECT * FROM root c + SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer"" ) c -WHERE ((c[""Discriminator""] = ""Customer"") AND CONTAINS(c[""ContactName""], ""z""))"); +WHERE CONTAINS(c[""ContactName""], ""z"")"); } [ConditionalTheory] @@ -128,7 +143,7 @@ public virtual async Task FromSqlRaw_queryable_composed_after_removing_whitespac { using var context = CreateContext(); var query = context.Set().FromSqlRaw( - _eol + " " + _eol + _eol + _eol + "SELECT" + _eol + "* FROM root c") + _eol + " " + _eol + _eol + _eol + "SELECT" + _eol + @"* FROM root c WHERE c[""Discriminator""] = ""Customer""") .Where(c => c.ContactName.Contains("z")); var actual = async @@ -145,9 +160,9 @@ public virtual async Task FromSqlRaw_queryable_composed_after_removing_whitespac SELECT - * FROM root c + * FROM root c WHERE c[""Discriminator""] = ""Customer"" ) c -WHERE ((c[""Discriminator""] = ""Customer"") AND CONTAINS(c[""ContactName""], ""z""))"); +WHERE CONTAINS(c[""ContactName""], ""z"")"); } [ConditionalTheory] @@ -158,7 +173,7 @@ public async Task FromSqlRaw_queryable_composed_compiled(bool async) { var query = EF.CompileAsyncQuery( (NorthwindContext context) => context.Set() - .FromSqlRaw(@"SELECT * FROM root c") + .FromSqlRaw(@"SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer""") .Where(c => c.ContactName.Contains("z"))); using (var context = CreateContext()) @@ -172,7 +187,7 @@ public async Task FromSqlRaw_queryable_composed_compiled(bool async) { var query = EF.CompileQuery( (NorthwindContext context) => context.Set() - .FromSqlRaw(@"SELECT * FROM root c") + .FromSqlRaw(@"SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer""") .Where(c => c.ContactName.Contains("z"))); using (var context = CreateContext()) @@ -186,9 +201,9 @@ public async Task FromSqlRaw_queryable_composed_compiled(bool async) AssertSql( @"SELECT c FROM ( - SELECT * FROM root c + SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer"" ) c -WHERE ((c[""Discriminator""] = ""Customer"") AND CONTAINS(c[""ContactName""], ""z""))"); +WHERE CONTAINS(c[""ContactName""], ""z"")"); } [ConditionalTheory] @@ -199,7 +214,7 @@ public virtual async Task FromSqlRaw_queryable_composed_compiled_with_parameter( { var query = EF.CompileAsyncQuery( (NorthwindContext context) => context.Set() - .FromSqlRaw(@"SELECT * FROM root c WHERE c[""CustomerID""] = {0}", "CONSH") + .FromSqlRaw(@"SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer"" AND c[""CustomerID""] = {0}", "CONSH") .Where(c => c.ContactName.Contains("z"))); using (var context = CreateContext()) @@ -213,7 +228,7 @@ public virtual async Task FromSqlRaw_queryable_composed_compiled_with_parameter( { var query = EF.CompileQuery( (NorthwindContext context) => context.Set() - .FromSqlRaw(@"SELECT * FROM root c WHERE c[""CustomerID""] = {0}", "CONSH") + .FromSqlRaw(@"SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer"" AND c[""CustomerID""] = {0}", "CONSH") .Where(c => c.ContactName.Contains("z"))); using (var context = CreateContext()) @@ -227,9 +242,9 @@ public virtual async Task FromSqlRaw_queryable_composed_compiled_with_parameter( AssertSql( @"SELECT c FROM ( - SELECT * FROM root c WHERE c[""CustomerID""] = ""CONSH"" + SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer"" AND c[""CustomerID""] = ""CONSH"" ) c -WHERE ((c[""Discriminator""] = ""Customer"") AND CONTAINS(c[""ContactName""], ""z""))"); +WHERE CONTAINS(c[""ContactName""], ""z"")"); } [ConditionalTheory] @@ -240,7 +255,7 @@ public virtual async Task FromSqlRaw_queryable_multiple_line_query(bool async) var query = context.Set().FromSqlRaw( @"SELECT * FROM root c -WHERE c[""City""] = 'London'"); +WHERE c[""Discriminator""] = ""Customer"" AND c[""City""] = 'London'"); var actual = async ? await query.ToArrayAsync() @@ -254,9 +269,8 @@ FROM root c FROM ( SELECT * FROM root c - WHERE c[""City""] = 'London' -) c -WHERE (c[""Discriminator""] = ""Customer"")"); + WHERE c[""Discriminator""] = ""Customer"" AND c[""City""] = 'London' +) c"); } [ConditionalTheory] @@ -266,7 +280,8 @@ public virtual async Task FromSqlRaw_queryable_composed_multiple_line_query(bool using var context = CreateContext(); var query = context.Set().FromSqlRaw( @"SELECT * -FROM root c") +FROM root c +WHERE c[""Discriminator""] = ""Customer""") .Where(c => c.City == "London"); var actual = async @@ -281,8 +296,9 @@ public virtual async Task FromSqlRaw_queryable_composed_multiple_line_query(bool FROM ( SELECT * FROM root c + WHERE c[""Discriminator""] = ""Customer"" ) c -WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""City""] = ""London""))"); +WHERE (c[""City""] = ""London"")"); } [ConditionalTheory] @@ -294,7 +310,7 @@ public async Task FromSqlRaw_queryable_with_parameters(bool async) using var context = CreateContext(); var query = context.Set().FromSqlRaw( - @"SELECT * FROM root c WHERE c[""City""] = {0} AND c[""ContactTitle""] = {1}", city, + @"SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer"" AND c[""City""] = {0} AND c[""ContactTitle""] = {1}", city, contactTitle); var actual = async @@ -311,9 +327,8 @@ public async Task FromSqlRaw_queryable_with_parameters(bool async) SELECT c FROM ( - SELECT * FROM root c WHERE c[""City""] = @p0 AND c[""ContactTitle""] = @p1 -) c -WHERE (c[""Discriminator""] = ""Customer"")"); + SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer"" AND c[""City""] = @p0 AND c[""ContactTitle""] = @p1 +) c"); } [ConditionalTheory] @@ -322,7 +337,7 @@ public async Task FromSqlRaw_queryable_with_parameters_inline(bool async) { using var context = CreateContext(); var query = context.Set().FromSqlRaw( - @"SELECT * FROM root c WHERE c[""City""] = {0} AND c[""ContactTitle""] = {1}", "London", + @"SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer"" AND c[""City""] = {0} AND c[""ContactTitle""] = {1}", "London", "Sales Representative"); var actual = async @@ -339,9 +354,8 @@ public async Task FromSqlRaw_queryable_with_parameters_inline(bool async) SELECT c FROM ( - SELECT * FROM root c WHERE c[""City""] = @p0 AND c[""ContactTitle""] = @p1 -) c -WHERE (c[""Discriminator""] = ""Customer"")"); + SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer"" AND c[""City""] = @p0 AND c[""ContactTitle""] = @p1 +) c"); } [ConditionalTheory] @@ -352,7 +366,7 @@ public async Task FromSqlRaw_queryable_with_null_parameter(bool async) using var context = CreateContext(); var query = context.Set().FromSqlRaw( - @"SELECT * FROM root c WHERE c[""ReportsTo""] = {0} OR (IS_NULL(c[""ReportsTo""]) AND IS_NULL({0}))", reportsTo); + @"SELECT * FROM root c WHERE c[""Discriminator""] = ""Employee"" AND c[""ReportsTo""] = {0} OR (IS_NULL(c[""ReportsTo""]) AND IS_NULL({0}))", reportsTo); var actual = async ? await query.ToArrayAsync() @@ -365,9 +379,8 @@ public async Task FromSqlRaw_queryable_with_null_parameter(bool async) SELECT c FROM ( - SELECT * FROM root c WHERE c[""ReportsTo""] = @p0 OR (IS_NULL(c[""ReportsTo""]) AND IS_NULL(@p0)) -) c -WHERE (c[""Discriminator""] = ""Employee"")"); + SELECT * FROM root c WHERE c[""Discriminator""] = ""Employee"" AND c[""ReportsTo""] = @p0 OR (IS_NULL(c[""ReportsTo""]) AND IS_NULL(@p0)) +) c"); } [ConditionalTheory] @@ -379,7 +392,7 @@ public async Task FromSqlRaw_queryable_with_parameters_and_closure(bool async) using var context = CreateContext(); var query = context.Set().FromSqlRaw( - @"SELECT * FROM root c WHERE c[""City""] = {0}", city) + @"SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer"" AND c[""City""] = {0}", city) .Where(c => c.ContactTitle == contactTitle); var queryString = query.ToQueryString(); @@ -397,9 +410,9 @@ public async Task FromSqlRaw_queryable_with_parameters_and_closure(bool async) SELECT c FROM ( - SELECT * FROM root c WHERE c[""City""] = @p0 + SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer"" AND c[""City""] = @p0 ) c -WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""ContactTitle""] = @__contactTitle_1))"); +WHERE (c[""ContactTitle""] = @__contactTitle_1)"); } [ConditionalTheory] @@ -408,7 +421,7 @@ public virtual async Task FromSqlRaw_queryable_simple_cache_key_includes_query_s { using var context = CreateContext(); var query = context.Set() - .FromSqlRaw(@"SELECT * FROM root c WHERE c[""City""] = 'London'"); + .FromSqlRaw(@"SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer"" AND c[""City""] = 'London'"); var actual = async ? await query.ToArrayAsync() @@ -418,7 +431,7 @@ public virtual async Task FromSqlRaw_queryable_simple_cache_key_includes_query_s Assert.True(actual.All(c => c.City == "London")); query = context.Set() - .FromSqlRaw(@"SELECT * FROM root c WHERE c[""City""] = 'Seattle'"); + .FromSqlRaw(@"SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer"" AND c[""City""] = 'Seattle'"); actual = async ? await query.ToArrayAsync() @@ -430,15 +443,13 @@ public virtual async Task FromSqlRaw_queryable_simple_cache_key_includes_query_s AssertSql( @"SELECT c FROM ( - SELECT * FROM root c WHERE c[""City""] = 'London' -) c -WHERE (c[""Discriminator""] = ""Customer"")", + SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer"" AND c[""City""] = 'London' +) c", // @"SELECT c FROM ( - SELECT * FROM root c WHERE c[""City""] = 'Seattle' -) c -WHERE (c[""Discriminator""] = ""Customer"")"); + SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer"" AND c[""City""] = 'Seattle' +) c"); } [ConditionalTheory] @@ -447,7 +458,7 @@ public virtual async Task FromSqlRaw_queryable_with_parameters_cache_key_include { var city = "London"; var contactTitle = "Sales Representative"; - var sql = @"SELECT * FROM root c WHERE c[""City""] = {0} AND c[""ContactTitle""] = {1}"; + var sql = @"SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer"" AND c[""City""] = {0} AND c[""ContactTitle""] = {1}"; using var context = CreateContext(); var query = context.Set().FromSqlRaw(sql, city, contactTitle); @@ -479,18 +490,16 @@ public virtual async Task FromSqlRaw_queryable_with_parameters_cache_key_include SELECT c FROM ( - SELECT * FROM root c WHERE c[""City""] = @p0 AND c[""ContactTitle""] = @p1 -) c -WHERE (c[""Discriminator""] = ""Customer"")", + SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer"" AND c[""City""] = @p0 AND c[""ContactTitle""] = @p1 +) c", // @"@p0='Madrid' @p1='Accounting Manager' SELECT c FROM ( - SELECT * FROM root c WHERE c[""City""] = @p0 AND c[""ContactTitle""] = @p1 -) c -WHERE (c[""Discriminator""] = ""Customer"")"); + SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer"" AND c[""City""] = @p0 AND c[""ContactTitle""] = @p1 +) c"); } [ConditionalTheory] @@ -498,7 +507,7 @@ SELECT c public virtual async Task FromSqlRaw_queryable_simple_as_no_tracking_not_composed(bool async) { using var context = CreateContext(); - var query = context.Set().FromSqlRaw(@"SELECT * FROM root c") + var query = context.Set().FromSqlRaw(@"SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer""") .AsNoTracking(); var actual = async @@ -511,9 +520,8 @@ public virtual async Task FromSqlRaw_queryable_simple_as_no_tracking_not_compose AssertSql( @"SELECT c FROM ( - SELECT * FROM root c -) c -WHERE (c[""Discriminator""] = ""Customer"")"); + SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer"" +) c"); } [ConditionalTheory] @@ -524,7 +532,7 @@ public virtual async Task FromSqlRaw_queryable_simple_projection_composed(bool a var query = context.Set().FromSqlRaw( @"SELECT * FROM root c -WHERE NOT c[""Discontinued""] AND ((c[""UnitsInStock""] + c[""UnitsOnOrder""]) < c[""ReorderLevel""])") +WHERE c[""Discriminator""] = ""Product"" AND NOT c[""Discontinued""] AND ((c[""UnitsInStock""] + c[""UnitsOnOrder""]) < c[""ReorderLevel""])") .Select(p => p.ProductName); var actual = async @@ -538,9 +546,8 @@ FROM root c FROM ( SELECT * FROM root c - WHERE NOT c[""Discontinued""] AND ((c[""UnitsInStock""] + c[""UnitsOnOrder""]) < c[""ReorderLevel""]) -) c -WHERE (c[""Discriminator""] = ""Product"")"); + WHERE c[""Discriminator""] = ""Product"" AND NOT c[""Discontinued""] AND ((c[""UnitsInStock""] + c[""UnitsOnOrder""]) < c[""ReorderLevel""]) +) c"); } [ConditionalTheory] @@ -548,7 +555,7 @@ FROM root c public virtual async Task FromSqlRaw_composed_with_nullable_predicate(bool async) { using var context = CreateContext(); - var query = context.Set().FromSqlRaw(@"SELECT * FROM root c") + var query = context.Set().FromSqlRaw(@"SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer""") .Where(c => c.ContactName == c.CompanyName); var actual = async @@ -560,9 +567,9 @@ public virtual async Task FromSqlRaw_composed_with_nullable_predicate(bool async AssertSql( @"SELECT c FROM ( - SELECT * FROM root c + SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer"" ) c -WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""ContactName""] = c[""CompanyName""]))"); +WHERE (c[""ContactName""] = c[""CompanyName""])"); } [ConditionalTheory] @@ -572,7 +579,7 @@ public virtual async Task FromSqlRaw_does_not_parameterize_interpolated_string(b using var context = CreateContext(); var propertyName = "OrderID"; var max = 10250; - var query = context.Orders.FromSqlRaw($@"SELECT * FROM root c WHERE c[""{propertyName}""] < {{0}}", max); + var query = context.Orders.FromSqlRaw($@"SELECT * FROM root c WHERE c[""Discriminator""] = ""Order"" AND c[""{propertyName}""] < {{0}}", max); var actual = async ? await query.ToListAsync() @@ -586,7 +593,7 @@ public virtual async Task FromSqlRaw_does_not_parameterize_interpolated_string(b public virtual async Task FromSqlRaw_queryable_simple_projection_not_composed(bool async) { using var context = CreateContext(); - var query = context.Set().FromSqlRaw(@"SELECT * FROM root c") + var query = context.Set().FromSqlRaw(@"SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer""") .Select( c => new { c.CustomerID, c.City }) .AsNoTracking(); @@ -601,9 +608,8 @@ public virtual async Task FromSqlRaw_queryable_simple_projection_not_composed(bo AssertSql( @"SELECT c[""CustomerID""], c[""City""] FROM ( - SELECT * FROM root c -) c -WHERE (c[""Discriminator""] = ""Customer"")"); + SELECT * FROM root c WHERE c[""Discriminator""] = ""Customer"" +) c"); } private void AssertSql(params string[] expected)