2011-12-03 10 views
5

estoy usando el siguiente código C#:No se puede convertir objeto de tipo 'NHibernate.Hql.Ast.HqlCast' al tipo 'NHibernate.Hql.Ast.HqlBooleanExpression

public IList<T> GetAllByExpression(Expression<Func<T, bool>> expression, int startIndex, int count, Func<T, DateTime> dateTimeSelector) 
{ 
    using (ISession session = NHibernateHelper.GetSession()) 
    { 
     return session.Query<T>() 
      .Where(expression) 
      .OrderBy(dateTimeSelector) 
      .Skip(startIndex - 1) 
      .Take(count) 
      .ToList(); 
    } 
} 

actualización: incluso el código follwoing lanza la misma excepción:

public IList<T> GetAllByExpression(Expression<Func<T, bool>> expression, int startIndex, int count, Expression<Func<T, DateTime>> dateTimeSelector) 
{ 
    using (ISession session = NHibernateHelper.GetSession()) 
    { 
     return session.Query<T>() 
      .Where(expression) 
      //.OrderBy(dateTimeSelector) 
      //.Skip(startIndex - 1) 
      //.Take(count) 
      .ToList(); 
    } 
} 

y obtener Nh error:

Unable to cast object of type 'NHibernate.Hql.Ast.HqlCast' to type 'NHibernate.Hql.Ast.HqlBooleanExpression'.

¿Qué estoy haciendo mal?

+0

puede ser su la expresión que está proporcionando a Dónde está fallando – Baz1nga

Respuesta

6

El problema fue que escribí condición de cortocircuito en la expresión: como ((un nulo ==) verdadera: a> b) (?) NH fundición falla en ese

+0

Puede confirmar que este es el problema. Tenía el mismo problema y la reescritura de la expresión resolvió el problema. ¡Gracias por compartir! –

+0

Para obtener un buen ejemplo de cómo reescribir el código para evitar este error, puede ver la respuesta aquí: http://stackoverflow.com/questions/9774598/conditional-operator-in-linq-expression-causes-nhibernate-exception – humbads

0

Probablemente falte Expression<> a su predicado datetime dateTimeSelector.

+0

intentado comentar todo: .OrderBy (dateTimeSelector) .Skip (startIndex - 1) .Tomar (contar), y no ayudó a –

+0

cómo se ve su llamada de ejemplo? –

+0

El problema fue que escribí una condición breve en la expresión: como ((a == nulo)? Verdadero: a> b) NH casting falla en eso (?) –

Cuestiones relacionadas