2012-06-12 7 views
9

Ho una query da linq a NHibernate.Max in linq su NHibernate per dati non presenti nel database

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

Se Request tabella non ha le righe, l'esecuzione di questa query solleva GenericADOException con questo messaggio:

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

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

Cosa devo fare?

risposta

11

Prova questa

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

Perché il cast fa funzionare questo? 'X.Code' qualcosa di diverso da 'int?'? (Voglio solo imparare, non promuovere la mia risposta). –

+0

@GertArnold Non lo so, funziona solo :) Ma penso che sia qualcosa legato al provider linq di Nhibernate. –

+1

Ok, grazie per la risposta. Forse qualcuno può far luce su questo. –

1

penso che questo dovrebbe funzionare con Linq to NHibernate:

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

o forse DefaultIfEmpty(<some value>).

+0

La soluzione per molti record nel database per le prestazioni non è adatta. – Ehsan

+0

Perché no? DefaultIfEmpty non recupera più record, aggiungerà solo un valore se la sequenza è vuota. –

+3

DefaultIfEmpty per il provider linib di NHibernate non è implementato e genera un'eccezione a partire da NHibernate 3.3.1.4000 versione –