2012-06-12 16 views
9

Mam zapytanie przez linq do NHibernate.Max w linq do NHibernate dla nieistniejących danych w bazie danych

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

Jeśli Request tabela nie ma wierszy, wykonanie tego zapytania podnosi GenericADOException z tej wiadomości:

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

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

Co należy zrobić?

Odpowiedz

11

Spróbuj

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

Dlaczego obsada to działa? Czy 'x.Code' było czymś innym niż' int? '? (Chcę się tylko uczyć, nie promując własnej odpowiedzi). –

+0

@GertArnold Nie wiem, to po prostu działa :) Ale myślę, że jest to coś związanego z dostawcą linq Nhibernate. –

+1

OK, dziękuję za odpowiedź. Może ktoś może rzucić trochę światła na to. –

1

myślę, że to powinno działać z Linq-NHibernate:

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

czy może DefaultIfEmpty(<some value>).

+0

Twoje rozwiązanie dla wielu rekordów w bazie danych dla wydajności nie jest odpowiednie. – Ehsan

+0

Dlaczego nie? DefaultIfEmpty nie pobierze więcej rekordów, doda tylko wartość, jeśli sekwencja jest pusta. –

+3

DefaultIfEmpty dla NHibernate dostawca linq nie jest zaimplementowany i zgłasza wyjątek od NHibernate 3.3.1.4000 wersja –

Powiązane problemy