Requête group by date pour ObjectDataSource

LoPo783 Messages postés 4 Date d'inscription mercredi 14 mars 2012 Statut Membre Dernière intervention 16 mars 2012 - 14 mars 2012 à 14:41
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 16 mars 2012 à 19:59
Bonjour,

J'ai une table SIMULATION avec un champ DATESIMU en datetime.
Je voudrais faire un graphique où l'on voit le nombre de simulation par jour.
J'aimerais faire une requête de ce genre pour remplir un ObjectDataSource.

public List<SIMULATION> GetSimuByDay()
        {
            var q = from _simu in dbData.db.SIMULATION
                    group _simu by new {_simu.DATESIMU}
                    into g
                    select new {g.Key.DATESIMU, Count = g.Count()};

            return q.ToList();
        }


Je ne sais pas comment comment grouper les simulations par jour(sans tenir compte de l'heure).
Et j'ai ce message d'erreur:
Erreur 58 Impossible de convertir implicitement le type 'System.Collections.Generic.List' en 'System.Collections.Generic.List<SIMULATION>'

7 réponses

LoPo783 Messages postés 4 Date d'inscription mercredi 14 mars 2012 Statut Membre Dernière intervention 16 mars 2012
14 mars 2012 à 14:53
Pour info j'utilise LINQ to SQL avec C#.
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
15 mars 2012 à 21:32
Bonsoir,

Pour ton erreur tu veux rentrer q.ToList();(une liste génériqu) dans List<SIMULATION> (une liste de simulations), à mon avis il faudrait q.ToListt<SIMULATION>();

pour le group by as tu essayer la méthode Date de ton DateTime?


Whismeril
0
LoPo783 Messages postés 4 Date d'inscription mercredi 14 mars 2012 Statut Membre Dernière intervention 16 mars 2012
16 mars 2012 à 09:37
Merci pour la réponse.

Je viens d'essayer ça
return q.ToList<SIMULATION>();


Mais j'ai une erreur.
Erreur 57 Impossible d'initialiser un type 'SIMULATION' avec un initialiseur de collection, car il n'implémente pas 'System.Collections.IEnumerable'

J'ai réussi à faire ce que je voulais en SQL en remplissant un DataTable puis en le définissant en DataSource de mon graphique.
Etant plus expérimenté en SQL je me suis aperçu que la requête n'était pas aussi simple, je me suis fais une méthode qui gère aussi les jours où il n'y a pas de simulation et met le compteur à 0

Merci
0
Tupad Messages postés 239 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 27 août 2012 5
16 mars 2012 à 14:00
Tu essaies de caster une liste dans une collection de type ICollection> ce qui ne peut pas fonctionner.

Ton code devrait ressembler à quelque chose comme ca:
public List> GetSimuByDay()
{
return _simu.GroupBy(s => s.DATESIMU.DATE).ToList();
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LoPo783 Messages postés 4 Date d'inscription mercredi 14 mars 2012 Statut Membre Dernière intervention 16 mars 2012
16 mars 2012 à 16:14
Merci Tupad,

public List> GetSimuByDay()
{
    var q = from _simu in dbData.db.SIMULATION
            select _simu;

    return q.GroupBy(s => s.DATESIMU.Value.Date).ToList();
}


Je sens que j'approche du but. Cette requête me donne juste une liste de date comme je voulais. Il ne me manque plus que le count pour chaque date.
0
Tupad Messages postés 239 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 27 août 2012 5
16 mars 2012 à 16:45
Si tu veux avoir le nombre d'occurences pour chaque date, chaque object IGrouping a une propriété count() pour compter le nombre d'occurences pour chaque date.
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
16 mars 2012 à 19:59
Désolé pour la fausse piste je ne maitrise pas assez linq


Whismeril
0
Rejoignez-nous