Comment puis-je sélectionner la valeur maximale dans NHibernate?
J'ai besoin d'obtenir un maximum de l'ordre des pages à partir de la base de données:
int maxOrder = GetSession.Query<Page>().Max(x => x.PageOrder);
Les travaux ci-dessus si il y a des lignes dans la table de base de données, mais quand la table est vide je suis arriver:
Value cannot be null.
Parameter name: item
OriginalL'auteur Sasha | 2011-01-21
Vous devez vous connecter pour publier un commentaire.
Note le casting (je suis en supposant que PageOrder est un int)
ArgumentOutOfRange
exception avec NHibernate v3.3.1.* dans le cas où il n'y a pasPage
enregistrements dans la base de donnéesOriginalL'auteur Diego Mijelshon
Dans la façon dont vous le faites est normal de se faire une exception, car la énumérable, que le
GetSession.Query<Page>()
renvoie, est vide (parce que la table est vide comme vous l'avez mentionné).L'exception que vous devez obtenir de l'est: Séquence contient pas d'éléments.
L'exception que vous mentionnez dans votre question, c'est parce que l'élément variable (qui n'est pas pertinent avec le NHiberanate requête de la liste ci-dessus) est nul (ligne 54 attribue la propriété d'élément à null).
Un moyen plus sûr d'obtenir le max à partir d'une propriété dans un tableau serait la suivante:
ou à l'aide de QueryOver avec NHibenrate 3.0:
Si le tableau est vide, vous obtiendrez max = 0
Vous pouvez utiliser QueryOver si vous utilisez NHibernate 3.0. J'ai édité ma réponse à inclure une version avec QueryOver.
Le QueryOver version ne fonctionne pas pour moi avec une table vide. Je pensais que le comportement que vous décrivez, mais l'appel à la Liste<int>, déclenche une Exception au lieu de cela... Cependant, Diego réponse fonctionne très bien pour moi et est également plus court 🙂
Eh bien, sa fait plus de 3 ans depuis que j'ai donné cette réponse et un peu de choses ont changé dans NHibernate depuis. Dans la version que j'ai testé ce que ça marchait bien, mais je suis content que vous avez trouvé une réponse ici, même si elle n'était pas la mienne 😉
OriginalL'auteur tolism7
Si vous rencontrez des problèmes avec le QueryOver exemple par tolism7 (InvalidCastException), voici comment je l'ai eu à travailler:
OriginalL'auteur breez