diff --git a/.github/workflows/NetCoreTests.yml b/.github/workflows/NetCoreTests.yml index 6537008b100..5bd6bdbc64b 100644 --- a/.github/workflows/NetCoreTests.yml +++ b/.github/workflows/NetCoreTests.yml @@ -54,7 +54,7 @@ jobs: - uses: actions/checkout@v3 - name: Setup .NET - uses: actions/setup-dotnet@v2 + uses: actions/setup-dotnet@v3 with: dotnet-version: 6.0.x diff --git a/src/NHibernate.Test/Async/Linq/ByMethod/MappedAsTests.cs b/src/NHibernate.Test/Async/Linq/ByMethod/MappedAsTests.cs index af79cd5f272..933150fd09d 100644 --- a/src/NHibernate.Test/Async/Linq/ByMethod/MappedAsTests.cs +++ b/src/NHibernate.Test/Async/Linq/ByMethod/MappedAsTests.cs @@ -28,6 +28,7 @@ public async Task WithUnaryExpressionAsync() await (db.Orders.Where(o => o.Freight == (-num).MappedAs(NHibernateUtil.Decimal)).ToListAsync()); await (db.Orders.Where(o => o.Freight == ((decimal) num).MappedAs(NHibernateUtil.Decimal)).ToListAsync()); await (db.Orders.Where(o => o.Freight == ((decimal?) (decimal) num).MappedAs(NHibernateUtil.Decimal)).ToListAsync()); + await (db.Orders.Where(o => db.Orders.Where(o2 => o2.Freight == (-num).MappedAs(NHibernateUtil.Decimal)).Contains(o)).ToListAsync()); } [Test] diff --git a/src/NHibernate.Test/Linq/ByMethod/MappedAsTests.cs b/src/NHibernate.Test/Linq/ByMethod/MappedAsTests.cs index f87cff8af92..6528693f58a 100644 --- a/src/NHibernate.Test/Linq/ByMethod/MappedAsTests.cs +++ b/src/NHibernate.Test/Linq/ByMethod/MappedAsTests.cs @@ -17,6 +17,7 @@ public void WithUnaryExpression() db.Orders.Where(o => o.Freight == (-num).MappedAs(NHibernateUtil.Decimal)).ToList(); db.Orders.Where(o => o.Freight == ((decimal) num).MappedAs(NHibernateUtil.Decimal)).ToList(); db.Orders.Where(o => o.Freight == ((decimal?) (decimal) num).MappedAs(NHibernateUtil.Decimal)).ToList(); + db.Orders.Where(o => db.Orders.Where(o2 => o2.Freight == (-num).MappedAs(NHibernateUtil.Decimal)).Contains(o)).ToList(); } [Test] diff --git a/src/NHibernate.Test/Linq/ParameterTypeLocatorTests.cs b/src/NHibernate.Test/Linq/ParameterTypeLocatorTests.cs index 771d5c9fd73..e39a5f8eb4d 100644 --- a/src/NHibernate.Test/Linq/ParameterTypeLocatorTests.cs +++ b/src/NHibernate.Test/Linq/ParameterTypeLocatorTests.cs @@ -212,6 +212,16 @@ public void ContainsStringEnumTest() db.Users.Where(o => values.Contains(o.Name == o.Name ? o.Enum1 : o.NullableEnum1.Value)), db.Timesheets.Where(o => o.Users.Any(u => values.Contains(u.Enum1))) ); + + AssertResults( + new Dictionary> + { + {"0", o => o is Int32Type}, + {"value(NHibernate.DomainModel.Northwind.Entities.EnumStoredAsString[])", o => o is EnumStoredAsStringType} + }, + db.Timesheets.Where(o => o.Users.Where(u => u.Id > 0).Any(u => values.Contains(u.Enum1))), + db.Timesheets.Where(o => o.Users.Any(u => u.Id > 0 && values.Contains(u.Enum1))) + ); } [Test] diff --git a/src/NHibernate/Linq/Visitors/ParameterTypeLocator.cs b/src/NHibernate/Linq/Visitors/ParameterTypeLocator.cs index eeb458568d0..f37e1422535 100644 --- a/src/NHibernate/Linq/Visitors/ParameterTypeLocator.cs +++ b/src/NHibernate/Linq/Visitors/ParameterTypeLocator.cs @@ -302,6 +302,7 @@ private bool TryLinkContainsMethod(QueryModel queryModel) // ContainsResultOperator where the constant expression is dislocated from the related expression, // we have to manually link the related expressions. if (queryModel.ResultOperators.Count != 1 || + queryModel.BodyClauses.Count > 0 || !(queryModel.ResultOperators[0] is ContainsResultOperator containsOperator) || !(queryModel.SelectClause.Selector is QuerySourceReferenceExpression querySourceReference) || !(querySourceReference.ReferencedQuerySource is MainFromClause mainFromClause))