2010-08-05 4 views
1

Je crée une requête simple avec des agrégats. L'exemple est:Requête subsonique 3 - erreur globale

string query = new SubSonic.Query.Select(
     SubSonic.Query.Aggregate.GroupBy("ProductID", "ID"), 
     SubSonic.Query.Aggregate.Max("Price", "MaxPrice") 
    ).From("Orders").ToString(); 

Le résultat est Sql:

SELECT ProductID AS ID, MAX(Price) AS MaxPrice 
FROM [Orders] 

lorsque le résultat devrait être:

SELECT ProductID AS ID, MAX(Price) AS MaxPrice 
FROM [Orders] 
GROUP BY ProductID 

Dans le résultat SubSonic2.2 est correct mais Subsonic3, le GROUPE L'instruction BY disparaît et la requête renvoie une seule ligne.

Est-ce que mon expression SqlQuery est correcte ou est-ce un bug dans SubSonic3?

Répondre

0

Pas tout à fait sûr de la syntaxe exacte, j'utilise la

MyTableClass.All().Max 

notation pour effectuer des requêtes it.Your exemple semble erroné que, parce que votre groupBy est dans votre sélection. Le groupBy ne fait pas partie du select, donc peut-être vous devez déplacer ce GroupBy en dehors de votre sélection

+0

merci de répondre, mais j'ai besoin du prix maximum pour chaque produit. Je peux réécrire la requête: SqlQuery query1 = new Sélectionnez(). From ("Orders"); query1.Aggregates = nouvelle Liste { new Aggregate ("ProductID", "ID", AggregateFunction.GroupBy), new Agrégat ("Prix", AggregateFunction.Max)}; MessageBox.Show (query1.ToString()); mais toujours le même résultat, j'ai besoin de la clause SQL 'GROUP BY ProductID' pour obtenir le prix maximum pour chaque produit. – aris

+0

Le problème est que SqlQuery ne génère pas la partie 'GROUP BY ProductID' dans la requête SQL – aris