IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linq Discussion :

Faire des Stats sur des periodes


Sujet :

Linq

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut Faire des Stats sur des periodes
    Bonjour,

    Je dis écrire des requêtes de statistiques d'insertion en base sur des periodes (une période étant une entité avec une StartDate et EndDate)

    Lorsque l'utilisateur demande des stats entre 2 date je créé des entité Period en base ayant des startdate et enddate correspondant au premier et dernier jour de chacun des mois entre les 2 date (ca permet d'avoir des stats par mois mais cela peut etre ajusté facilement) toutes ces entités partagent une clef specifique à la stat qui me permet de les retrouver pour la stat et les supprimer.

    >>> Si cela vous interesse vous pouvez sauter au 4 eme post les précédants sont mauvais

    J'ai donc écris ma stat comme cela (Objects contient une objectquery sur les entités à compter):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    public void GetStatesCount(DateTime startDate, DateTime endDate)
    {
        Guid statId = PeriodManager.CreatePeriods(startDate, endDate);
        try
        {
            var periods = ctx.Objects<Period>().Where(p => p.StatId == statId);
            var q = from s in Objects
                    from p in periods
                    join sj in Objects on
                    (s.Date >= p.StartDate &&
                        s.Date <= p.EndDate) equals true into g
                    orderby p.StartDate
                    select new
                    {
                        Period = p,
                        Count = g.Count()
                    };
     
            var res = q.ToArray();
            res.ToString();//BreakPoint
        }
        catch (Exception ex) { //BreakPoint }
        finally
        {
            PeriodManager.DeletePeriods(statId);
        }
    }
    Le souci c'est que cela ne marche pas vraiment comme je le veux... en effet pour cette stat (mais pas pour les future qui seront sur plusieurs lignes) au lieu d'avoir autant de résultat que de periode j'ai autant de résultat que de periode * nombre des objets à analyser.
    Y a surement un distinct a mettre quelque part mais je ne vois pas ou (il faudrait prendre en compte mes prochaines stats qui auront 3 champs dans le retour : Period, count, un champ de l'objet à analyser)

    Des idées ?

    Merci

  2. #2
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    mince en fait ma jointure n'est pas du tout bonne ... le count est toujours le même et correspond aux nombre d'objet entre le start date de la première période et le enddate de la dernière ... rhaaaa va falloir que j'apprenne a mieux utiliser tout ça ....

  3. #3
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var q = from p in periods
            select new
            {
                Period = p,
                Count = (from s in Objects
                         where s.Date >= p.StartDate &&
                            s.Date <= p.EndDate
                         select s).Count()
            };
    Ca passe mieux et c plus simple à écrire

    Mais bon pour la suivant il va falloir que je segmente ces stats ... en effet mes entités stocké dans Objects sont de différent type et il faut que je récupère les count en fonction des types des entités...

  4. #4
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var periods = ctx.Objects<Period>().Where(p => p.StatId == statId);
    var q = from p in periods
            from s in Objects
            group s by new { Type = s.GetType(), Period = p } into sg
            select new
            {
                Type = sg.Key.Type,
                Period = sg.Key.Period,
                Count = (from s in sg
                         where s.Date >= sg.Key.Period.StartDate &&
                            s.Date <= sg.Key.Period.EndDate
                         select s).Count()
            };
    Sur le papier c'est niquel ! dans les faits le gettype n'est pas supporté par EF ... Damned ! c'est embêtant ... des idées ?

Discussions similaires

  1. Réponses: 15
    Dernier message: 28/11/2012, 23h42
  2. Comment ajouter des séries dans des graphes sur des feuilles variables
    Par Molomarcopolo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/07/2012, 17h26
  3. Trigger pour mettre des droits sur des procedures et des vues
    Par briino dans le forum Développement
    Réponses: 3
    Dernier message: 23/09/2009, 10h44
  4. Faire des stats sur un fichiers
    Par Krispy dans le forum Langage
    Réponses: 1
    Dernier message: 27/06/2006, 17h13
  5. [VB.Net] Faire du JS sur des contrôles côté serveur
    Par TagadaTsoin dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/11/2003, 16h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo