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

C# Discussion :

Affichage de résultat prioritaire [Débutant]


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Etudiant informatique
    Inscrit en
    Octobre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Etudiant informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Affichage de résultat prioritaire
    Bonjour,

    Je me retrouve face à un soucis, vous comprendrez mieux avec un bout de code sous les

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                CampaignsLogic campLogic = new CampaignsLogic();
                List<campaigns> listCampaigns = campLogic.GetNewActiveAffiliateCampaigns(startDate);
                if (listCampaigns == null) this.ViewBag.campaigns = new List<campaigns>();
     
                this.ViewBag.Campaigns = listCampaigns;
                return View();
    Donc voila, en gros je reprends une class qui récupère une liste de campagne, tout est bien géré ici, mais je dois maintenant trier 2 attributs, et j'ai du mal un peu dans cette algorythme, quelqu'un pour un petit coup de main?
    Les deux attributs à trier sont CAMPAIGN_TYPE1 / CAMPAIGN_TYPE2 (je souhaite afficher le TYPE1 avant l'autre)

    Voila, si besoin d'information complémentaire, n'hésitez pas! Merci

  2. #2
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Le if est totalement inutile : il y a un bug dans la classe.

    Si listCampaigns est null, alors vous affectuez une nouvelle liste vide à this.ViewBag.campaigns

    Sauf qu'à la ligne suivante, vous affectez de toute manière listCampaigns (qui est donc toujours nul) à this.ViewBag.campaigns, qui devient donc null.

    Pour le reste, j'ai pas vu la question.

    En fait, vous voulez trier la liste ?

    http://msdn.microsoft.com/fr-fr/libr...v=vs.110).aspx
    On ne jouit bien que de ce qu’on partage.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Etudiant informatique
    Inscrit en
    Octobre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Etudiant informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Sinon entre temps j'ai fait un foreach pour parcourir l'une de mes attributs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                foreach (campaigns campaignsLogic in listCampaigns)
                {
                    if (campaignsLogic.CampaignCostTypeID == CampaignCostTypesLogic.CAMPAIGN_COST_TYPE_CPI);
                    {
                        this.ViewBag.Campaigns = listCampaigns;
                    }
                }
    (oui j'ai dit CAMPAIGN_TYPE1etc mais c'est COST_TYPE_CPI et l'autre CPL), mais il ne passe même pas par cette logique la listCampaigns est toujours affecté au même résultat!

    --

    Oui c'est bien un tri que je veux faire, et oui effectivement ma condition est inutile ici, je vais check votre lien et voir si je peux régler le problème, merci pour votre aide!

    En complément si c'est utile, voici ce qu'il y a dans le modèle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     public List<campaigns> GetNewActiveAffiliateCampaigns(DateTime initialDate)
            {
                return (from u in context.campaigns
                    where   u.IsPublic == 1 &&
                            (u.CampaignTypeID == CampaignsLogic.CAMPAIGN_TYPE_ALL_FORMAT_INCENT || u.CampaignTypeID == CampaignsLogic.CAMPAIGN_TYPE_MOBILE_ALL_FORMATS) &&
                            u.Status == CAMPAIGN_STATUS_LIVE &&
                            u.CreationDate > initialDate
                        select u).OrderByDescending(u => u.CreationDate).Take(10).ToList<campaigns>();
    Puis le CSHTML il y a le foreach dynamique.

    Encore un peu de mal avec le C#

    Merci!

    ----

    Edit: j'ai toujours besoin d'aide, désolé mais je tiens à régler ça rapidement parce que ça traine
    Je suis sur que c'est quelque chose de très simple mais j'ai du mal à assimiler, j'explique au mieux pour que vous compreniez ma situation:

    Je possède une liste qui a tout un tas de d'attribut, l'une d'elle correspond à celle que je veux différencier de l'autre (l'un à pour résultat 2, l'autre 3), pour pouvoir ensuite classer l'un avant l'autre, je pense qu'il faut que je crée une autre liste qui stockera l'un des résultat? J'ai essayé de séparer ma méthode pour que les deux sont déjà assigné avec les bons résultats (en gros j'ai réussi à les différencier mais en reprenant le code puis en y imposant ma condition dans le model) mais du coup j'ai pas réussi à afficher les deux en les implémentant dans le controller sous une liste différente.

    J'aimerais bien être un peu orienté puis je me débrouillerais.

    Merci d'avance!

  4. #4
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Je dois pas être réveiller, mais j'avoue que j'ai absolument rien compris.

    Vous pouvez donner un cas concret de ce que :
    - contient votre liste (lignes et attributs)
    - l'ordre de tri désiré
    On ne jouit bien que de ce qu’on partage.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Je dois pas être réveiller, mais j'avoue que j'ai absolument rien compris.
    Pourtant je suis bien réveillé, mais pas mieux

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Etudiant informatique
    Inscrit en
    Octobre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Etudiant informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Oui désolé je m'explique mal en me relisant je le vois bien, je vais reprendre en plus simple.

    Je suis chargé de classer par type de campagne une page web, leurs différente est leur variable qui est : l'un = CampaignCostTypesLogic.CAMPAIGN_COST_TYPE_CPI, l'autre CampaignCostTypesLogic.CAMPAIGN_COST_TYPE_CPL.

    Donc je souhaite afficher l'un avant l'autre peu importe l'ordre, actuellement les résultats sont affichés par la date de création, chose que je ne veux pas changer si ce n'est qu'ils ne se mélange pas entre type.

    Voici les codes sources pour le model:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            public List<campaigns> GetNewActiveAffiliateCampaigns(DateTime initialDate)
            {
                return (from u in context.campaigns
                    where   u.IsPublic == 1 &&
                            (u.CampaignTypeID == CampaignsLogic.CAMPAIGN_TYPE_ALL_FORMAT_INCENT || u.CampaignTypeID == CampaignsLogic.CAMPAIGN_TYPE_MOBILE_ALL_FORMATS) &&
                            u.Status == CAMPAIGN_STATUS_LIVE &&
                            u.CreationDate > initialDate /* && u.CampaignCostTypeID == CAMPAIGN_COST_TYPE_CPL && */
                        select u).OrderByDescending(u => u.CreationDate).Take(10).ToList<campaigns>();
                }
    Ce que je disais t'haleur, j'avais rajouté en mode "forçage" la condition qui permet à la méthode d'afficher seulement un des deux type que je voulais (voir commentaire du code), mais je trouve ça très mal géré car on doit faire un copié collé de cette méthode pour changer seulement une condition, d'ailleurs je n'avais pas réussi à faire fonctionner car ça utilise deux méthode pour seulement une petite fonction, c'est pas vraiment mon point fort.

    Enfin bref, dans mon controller j'ai fait quelque modification pour essayer de faire fonctionner mais malheureusement je n'arrive seulement à afficher ceux du type CPI ou CPL mais jamais les deux, voici les modifs que j'y ai apporté :
    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
            public ActionResult AdDealsNewCampaigns()
            {
                /*  GET NEW CAMPAIGNS SINCE J-7 ACTIVE AND AFFILIATION CAMPAIGNS (CPI or CPL/CPA only) */
                DateTime startDate = DateTime.UtcNow.Subtract(new TimeSpan(21, 0, 0, 0));
                CampaignsLogic campLogic = new CampaignsLogic();
                CampaignsLogic listCPL = new CampaignsLogic();
                List<campaigns> listCampaigns = campLogic.GetNewActiveAffiliateCampaigns(startDate);
                //List<campaigns> listCPL = listCPL.GetNewActiveAffiliateCampaigns(startDate);
                foreach (campaigns campaignsLogic in listCampaigns)
                {
                    if (campaignsLogic.CampaignCostTypeID == CampaignCostTypesLogic.CAMPAIGN_COST_TYPE_CPI)
                    {
                       this.ViewBag.Campaigns = listCampaigns;
                    }
                    if (campaignsLogic.CampaignCostTypeID == CampaignCostTypesLogic.CAMPAIGN_COST_TYPE_CPL)
                    {
                        campaignsLogic.listCPL();
                    }
                }
                return View();
            }
    Oui je sais, c'est du n'importe quoi car je fais des séries de test que j'arrive toujours pas à comprendre la logique... Il me faudra des petites indications de votre part et je pense que je pourrais comprendre!

    Sinon le CSHTML contient l'affichage dynamique des campagnes! (on est sur une newsletter).

    Voila, je vous remercie n'hésitez pas à me redemander si vous avez besoin d'autre indication!

  7. #7
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Il faut juste écrire un comparer qui permet de faire le tri selon le bon critère, puis appeler Sort() en prenant le comparer en paramètre :

    Code csharp : 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
    28
    29
     
        public class PageComparer : IComparer<List<campaigns>>
        {
            public int Compare(campaigns x, campaigns y)
            {
                if (x == null)
                {
                    if (y == null)
                    {
                        return 0;
                    }
                    else
                    {
                        return -1;
                    }
                }
                else
                {
                    if (y == null)
                    {
                        return 1;
                    }
                    else
                    {
                        return x.CampaignCostTypesLogic.CompareTo(y.CampaignCostTypesLogic);
                    }
                }
            }
        }

    Et dans ton code :
    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    PageComparer pc = new PageComparer();
    context.capaigns.Sort(pc);
    On ne jouit bien que de ce qu’on partage.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Etudiant informatique
    Inscrit en
    Octobre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Etudiant informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Je te remercie pour l'aide fournis! Cependant je me retrouve encore bloqué sur quelque point, d'ailleurs qui ne sont pas très clair encore pour moi.

    Donc j'ai mis la class PageComparer, par contre suite à une erreur de compilation (Microsoft visual Studio) j'ai du généré un "interface membre" qui donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                public int Compare(List<campaigns> x, List<campaigns> y)
                {
                    throw new NotImplementedException();
                }
    Il est placé en dessous de la class PageComparer, je sais pas vraiment si c'est utile mais en tout cas ça enlève une erreur de compilation, cependant il y en a d'autres qui m'empêche le fonctionnement, l'erreur de Sort.

    J'ai remarqué une petite erreur de ta part sur le mot context.campaigns, sinon je vois pas d'autre erreur et je ne comprends pas vraiment ce que veux le compilateur ici.

    Message d'erreur: Error 16 'System.Data.Entity.DbSet<DataLayer>' does not contain a definition for 'Sort' and no extension method 'Sort' accepting a first argument of type 'System.Data.Entity.DbSet<DataLayer>' could be found (are you missing a using directive or an assembly reference?)...

    Puis toutes les modifications je les ai implémenté sur la page model, le controller est inchangé, je sais pas si c'est ça qu'il fallait faire honnêtement j'ai du mal encore à comprendre les différences entre Controller / Model, ou implémenter etc.

    Merci encore pour l'aide que tu m'as apporté, c'est super gentil de ta part!

  9. #9
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Hmmm

    Déjà, ma classe comparer doit avoir une erreur.

    Essaie de la faire hériter de "IComparer<campaigns>" plutôt.
    Et du coup, vire la méthode que tu as ajouté, qui sert à rien.

    Sinon, problème plus grave : DbSet<T> n'est pas un IList<T> et n'est pas ISortable<T> apparemment.
    => Du coup, il n'implémente pas de méthode Sort()

    Donc pas d'autre choix que de recopier chaque élément de ton DbSet<campaigns> dans une List<campaigns> et de trier cette dernière.

    Je ne connais absolument pas ce namespace "Entity" : je hais au plus au point les framework "haut niveau", censés simplifier le code (ce qui est totalement faux), le rendre plus lisible (encore plus faux), réutilisable (la bonne blague) et performant (ce qui est absolument faux, à commencer par le fait que ça empêche d'utiliser convenablement le langage SQL qui est le goulot d'étranglement de n'importe quelle application qui accède à une base de données).

    Du coup je boycotte. Et je connais pas
    (j'en vois déjà qui disent "comment tu peux juger si tu connais pas" et je répondrai que je suis un vieux con borné )
    On ne jouit bien que de ce qu’on partage.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Etudiant informatique
    Inscrit en
    Octobre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Etudiant informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Je confirme ce que tu dis, j'ai toujours pas réussi à m'adapter à ce framework et honnêtement j'ai pas l'envie

    Je vais tester tout ce que tu m'as dis demain, en tout cas je te remercie ton aide m'a été grandement utile!

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Etudiant informatique
    Inscrit en
    Octobre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Etudiant informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Hello, le problème est réglé, en fait c'était beaucoup plus simple que ce qu'on à fait, il suffisait de modifier le code de base

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     public List<campaigns> GetNewActiveAffiliateCampaigns(DateTime initialDate)
            {
                return (from u in context.campaigns
                    where   u.IsPublic == 1 &&
                            (u.CampaignTypeID == CampaignsLogic.CAMPAIGN_TYPE_ALL_FORMAT_INCENT || u.CampaignTypeID == CampaignsLogic.CAMPAIGN_TYPE_MOBILE_ALL_FORMATS) &&
                            u.Status == CAMPAIGN_STATUS_LIVE &&
                            u.CreationDate > initialDate
                      /*  select u).OrderByDescending(u => u.CreationDate).Take(10).ToList<campaigns>(); */
    select u).OrderByDescending(u => u.CampaignCostTypeID == CampaignCostTypesLogic.CAMPAIGN_COST_TYPE_CPL).Take(10).ToList<campaigns>();
    Ce qui est mis en commentaire par la ligne juste en dessous! Merci de l'aide fournis je préfère de loin ta méthode que celle de ce framework très honnêtement!

    Problème résolu.

  12. #12
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Ah ben oui
    On ne jouit bien que de ce qu’on partage.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Affichage 1 résultat / 1 tableau
    Par oceane751 dans le forum PHP & Base de données
    Réponses: 24
    Dernier message: 01/05/2006, 19h22
  2. [MySQL] affichage du résultat d'une requete dans une page
    Par blackbird1 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 08/03/2006, 14h07
  3. [MySQL] Affichage des résultats d'un requête
    Par wiwi dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 07/02/2006, 11h25
  4. Affichage des résultats d'un moteur de recherche
    Par poah dans le forum Langage
    Réponses: 1
    Dernier message: 24/11/2005, 14h31
  5. Affichage du résultat
    Par thomas_strass dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/07/2005, 11h30

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