diff --git a/src/EFCore.Relational/Query/RelationalShapedQueryCompilingExpressionVisitor.ShaperProcessingExpressionVisitor.cs b/src/EFCore.Relational/Query/RelationalShapedQueryCompilingExpressionVisitor.ShaperProcessingExpressionVisitor.cs index d82460d3e0c..3a64627b326 100644 --- a/src/EFCore.Relational/Query/RelationalShapedQueryCompilingExpressionVisitor.ShaperProcessingExpressionVisitor.cs +++ b/src/EFCore.Relational/Query/RelationalShapedQueryCompilingExpressionVisitor.ShaperProcessingExpressionVisitor.cs @@ -2066,7 +2066,9 @@ protected override Expression VisitBinary(BinaryExpression node) OrElse( ReferenceEqual(currentVariable, Constant(null)), ReferenceEqual(parameter, Constant(null))), - MakeBinary(node.NodeType, node.Left, parameter), + node is { NodeType: ExpressionType.Assign, Left: MemberExpression leftMemberExpression } + ? leftMemberExpression.Assign(parameter) + : MakeBinary(node.NodeType, node.Left, parameter), Call( PopulateListMethod.MakeGenericMethod(property.ClrType.TryGetElementType(typeof(IEnumerable<>))!), parameter, diff --git a/test/EFCore.Relational.Specification.Tests/Query/JsonQueryAdHocTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/JsonQueryAdHocTestBase.cs index 8fe9b15247f..c5c3dadfed6 100644 --- a/test/EFCore.Relational.Specification.Tests/Query/JsonQueryAdHocTestBase.cs +++ b/test/EFCore.Relational.Specification.Tests/Query/JsonQueryAdHocTestBase.cs @@ -8,6 +8,70 @@ public abstract class JsonQueryAdHocTestBase : NonSharedModelTestBase protected override string StoreName => "JsonQueryAdHocTest"; + #region 32310 + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task Contains_on_nested_collection_with_init_only_navigation(bool async) + { + var contextFactory = await InitializeAsync(seed: Seed32310); + await using var context = contextFactory.CreateContext(); + + var query = context.Pubs + .Where(u => u.Visits.DaysVisited.Contains(new DateOnly(2023, 1, 1))); + + var result = async + ? await query.FirstOrDefaultAsync()! + : query.FirstOrDefault()!; + + Assert.Equal("FBI", result.Name); + Assert.Equal(new DateOnly(2023, 1, 1), result.Visits.DaysVisited.Single()); + } + + protected virtual void Seed32310(MyContext32310 context) + { + var user = new Pub32310 + { + Name = "FBI", + Visits = new Visits32310 + { + LocationTag = "tag", + DaysVisited = new List { new(2023, 1, 1) } + } + }; + + context.Add(user); + context.SaveChanges(); + } + + protected class MyContext32310 : DbContext + { + public MyContext32310(DbContextOptions options) + : base(options) + { + } + + public DbSet Pubs => Set(); + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => modelBuilder.Entity(b => { b.OwnsOne(e => e.Visits).ToJson(); }); + } + + public class Pub32310 + { + public int Id { get; set; } + public required string Name { get; set; } + public Visits32310 Visits { get; set; } = null!; + } + + public class Visits32310 + { + public string LocationTag { get; set; } + public required List DaysVisited { get; init; } + } + + #endregion + #region 29219 [ConditionalTheory] @@ -893,7 +957,7 @@ public class MyJsonEntityLazyLoadingProxies } #endregion - + #region NotICollection [ConditionalTheory]