Skip to content

InvalidCastException for Linq query with subquery #2515

Closed
@cremor

Description

@cremor

I've just updated from NHibernate 5.2.7 to 5.3.2 and now one of my queries is failing.

I've simplified the failing query to this:

Customer customerParameter = ...

var customersSubquery = Query<SomeEntity>()
   .Select(x => x.Customer)
   .Where(x => x != customerParameter);

var result = Query<SomeOtherEntity>()
   .Where(x => customersSubquery.Contains(x.Customer))
   .ToArray();

This is the exception I get:

System.InvalidCastException: Unable to cast object of type 'NHibernate.Persister.Entity.SingleTableEntityPersister' to type 'NHibernate.Persister.Collection.IQueryableCollection'.

Full stack:

NHibernate.dll!NHibernate.Linq.Visitors.ParameterTypeLocator.SetParameterTypes(System.Collections.Generic.IDictionary<System.Linq.Expressions.ConstantExpression, NHibernate.Param.NamedParameter> parameters, Remotion.Linq.QueryModel queryModel, System.Type targetType, NHibernate.Engine.ISessionFactoryImplementor sessionFactory, bool removeMappedAsCalls) Line 116
NHibernate.dll!NHibernate.Linq.NhLinqExpression.Translate(NHibernate.Engine.ISessionFactoryImplementor sessionFactory, bool filter) Line 94
NHibernate.dll!NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(NHibernate.IQueryExpression queryExpression, string collectionRole, bool shallow, System.Collections.Generic.IDictionary<string, NHibernate.IFilter> filters, NHibernate.Engine.ISessionFactoryImplementor factory) Line 20
NHibernate.dll!NHibernate.Engine.Query.QueryPlanCache.GetHQLQueryPlan(NHibernate.IQueryExpression queryExpression, bool shallow, System.Collections.Generic.IDictionary<string, NHibernate.IFilter> enabledFilters) Line 63
NHibernate.dll!NHibernate.Impl.AbstractSessionImpl.GetHQLQueryPlan(NHibernate.IQueryExpression queryExpression, bool shallow) Line 584
NHibernate.dll!NHibernate.Impl.AbstractSessionImpl.CreateQuery(NHibernate.IQueryExpression queryExpression) Line 552
NHibernate.dll!NHibernate.Linq.DefaultQueryProvider.PrepareQuery(System.Linq.Expressions.Expression expression, out NHibernate.IQuery query) Line 208
NHibernate.dll!NHibernate.Linq.DefaultQueryProvider.ExecuteList<MyEntityType>(System.Linq.Expressions.Expression expression) Line 107
NHibernate.dll!NHibernate.Linq.NhQueryable<MyEntityType>.System.Collections.Generic.IEnumerable<MyEntityType>.GetEnumerator() Line 65
System.Core.dll!System.Linq.Buffer<MyEntityType>.Buffer(System.Collections.Generic.IEnumerable<MyEntityType> source)
System.Core.dll!System.Linq.Enumerable.ToArray<MyEntityType>(System.Collections.Generic.IEnumerable<MyEntityType> source)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions