2012-06-12 18 views
9

Tengo una consulta de linq a NHibernate.Max in linq a NHibernate porque no existen datos en la base de datos

var q = SessionInstance.Query<Request>().Max(e => e.Code); 

Si Request tabla tiene ninguna fila, la ejecución de esta consulta plantea GenericADOException con este mensaje:

{"Could not execute query[SQL: SQL not available]"}

{"Value cannot be null.\r\nParameter name: item"}

¿Qué debo hacer?

Respuesta

11

probar este

SessionInstance.Query<Request>().Max(x => (int?)x.Code); 
+0

¿Por qué el reparto hace que esto funcione? ¿Fue 'x.Code' algo más que' int? '? (Solo quiero aprender, no promocionar mi propia respuesta). –

+0

@GertArnold No lo sé, simplemente funciona :) Pero creo que es algo relacionado con el proveedor de Nhibernate linq. –

+1

Ok, gracias por su respuesta. Tal vez alguien pueda arrojar algo de luz sobre esto. –

1

creo que esto debería trabajar con LINQ-a-Nhibernate:

var q = SessionInstance.Query<Request>().Select(e => e.Code) 
    .DefaultIfEmpty().Max(); 

o tal vez DefaultIfEmpty(<some value>).

+0

Su solución para muchos registros en la base de datos para el rendimiento no es adecuada. – Ehsan

+0

¿Por qué no? DefaultIfEmpty no obtendrá más registros, solo agregará un valor si la secuencia está vacía. –

+3

DefaultIfEmpty for NHibernate El proveedor de linq no está implementado y arroja una excepción a partir de NHibernate 3.3.1.4000 versión –

Cuestiones relacionadas