2011-04-19 4 views
0
public IEnumerable GetActive() 
{ 
    return Session.CreateQuery("from Agency where active=true order by agencyname").List(); 
} 

De toute évidence, je peux trier la requête elle-même, mais qu'en est-il de la faire ensuite? Je veux juste trier IEnumerable retourné ici. Je peux très bien utiliser le résultat dans une boucle foreach, mais je n'ai pas les fonctionnalités disponibles sur une collection de listes standard (comme utiliser LINQ pour trier les données). Quelle est la meilleure méthode pour trier cela?Tri des résultats de la requête NHibernate

Edit: cela a fonctionné, et conservé la possibilité d'utiliser foreach:

public IEnumerable<Agency> GetActive() 
{ 
    return Session.CreateQuery("from Agency where active=true order by agencyname").List<Agency>(); 
} 

foreach (Agency agency in agencies.OrderBy(c=>c.AgencyId)) { ... } 
+0

J'ai effectivement essayé cela il y a quelques minutes, "source is not IEnumerable <>" – Chris

+0

Quelle version de NHibernate utilisez-vous? – mxmissile

+0

La version sur NHibernate.dll est 3.0.0.4000. – Chris

Répondre

3

vous devez retourner une liste fortement typée de l'entité correspondant à ce tableau

public IEnumerable<Agency> GetActive() 
{ 
    return Session.CreateQuery("from Agency where active=true") 
    .List<Agency>().orderby(c=>c.agencyname); 
} 
+0

J'ai essayé ceci avant de demander, mais j'obtiens une erreur: "Interface 'System.Collections.IEnumerable" n'a pas de paramètres de type " – Chris

+0

return Session.CreateQuery (" de l'agence où active = true order by agencyname "). Liste () then: foreach (Agence d'agence dans agency.OrderBy (c => c.AgencyId)) {travaillé – Chris

+2

Ah, la raison pour laquelle ça ne s'est pas affiché auparavant, c'est parce que je n'importais pas System.Collections.Generic, juste System.Collections. Habituellement, resharper choisit ce genre de chose. – Chris

0

Vous pouvez convertir le IENumerable à un LIst avec la méthode ToList(), puis trier.

Questions connexes