Question

J'essaie d'effectuer une requête d'agrégat simple qui renvoie le résultat de l'agrégat plus une colonne supplémentaire. Ce post - > La requête personnalisée avec Castle ActiveRecord avait un bon exemple sur la façon de réaliser cela, mais je peux semble pas le faire fonctionner. Il semble que ActiveRecordMediator.ExecuteQuery retourne une ArrayList d'objets (au lieu de ArrayList d'objet [], ce à quoi je m'attendrais). De plus, si j'essaie de le transtyper vers ICollection, je reçois une erreur d'exécution qui se plaint d'une distribution non valide. Code ci-dessous, toute aide appréciée (vous ne voulez pas utiliser SQL écrit à la main).

HqlBasedQuery query = new HqlBasedQuery(typeof(Something), @"select count(1),  
  p.Name from Something p 
  where p.SomeDate > :date
  order by p.Name
  group by p.Name");

query.SetParameter("date", new DateTime(2009, 1, 1));

var results = from summary in 
    (ICollection<object[]>)ActiveRecordMediator.ExecuteQuery(query)
    select new {
        Count = (int)summary[0], Name= (string)summary[1]
    };

La ligne après "sommaire" dans " est celui qui lève l'exception de distribution non valide.

(Vous avez oublié de mentionner: utilisation de VS2008, .NET 3.5SP1, ActiveRecord 1.0RC3, NHibernate 1.2)

Était-ce utile?

La solution

  1. Je pense que vous vouliez dire count (*) au lieu de count (1) (c'est pourquoi vous n'obtenez que des lignes à 1 colonne)
  2. ActiveRecordMediator.ExecuteQuery (au moins dans RC3) renvoie une ArrayList (et non un ICollection générique) de objet []
  3. Soyez prudent lors de la conversion de compte en int. Certaines bases de données renvoient des comptes sous la forme long (par exemple, SQL Server)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top