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

ASP.NET Discussion :

Requête Distinct Linq To SQL en C#


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Femme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2013
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 66
    Points : 57
    Points
    57
    Par défaut Requête Distinct Linq To SQL en C#
    bonjour les developpeurs voic ma requette qui retourne bien un resultat mais avec une redondance de donnees

    mais comment faire un distinct sur cette requette :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     var query = from a in dc.Region
                            join b in dc.Annonce
                            on a.IdReg equals b.idRegion
                            join z in dc.Annonceur on b.idAnnonceur equals z.IdAnnonceur
                            join e in dc.Commentaire on
                                b.IdAnn equals e.IdAnn
                            where (b.IdAnn == ids )
                            select new Ann_Region_Cate { Region = a, Annonce = b, Annonceur = z,Commentaire = e };
     
                return View(query.ToList());
    jai essayer sa mais aucun changement
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     var query = from a in dc.Region
                            join b in dc.Annonce
                            on a.IdReg equals b.idRegion
                            join z in dc.Annonceur on b.idAnnonceur equals z.IdAnnonceur
                            join e in dc.Commentaire on
                                b.IdAnn equals e.IdAnn
                            where (b.IdAnn == ids )
                            select new Ann_Region_Cate { Region = a, Annonce = b, Annonceur = z,Commentaire = e };
    ensuite sa encore aucun changement
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     var query = (from a in dc.Region 
                            join b in dc.Annonce
                            on a.IdReg equals b.idRegion
                            join z in dc.Annonceur on b.idAnnonceur equals z.IdAnnonceur
                            join e in dc.Commentaire on
                                b.IdAnn equals e.IdAnn
                            where (b.IdAnn == id)
                            select new Ann_Region_Cate { Region = a, Annonce = b, Annonceur = z, Commentaire = e }).Distinct();
    NB : je sais pas si c'est un distinct qu'il me faut le principe est que je viens dajouter une table commentaire dont le id de la table annonce migre dans la table commentaire maintenant une annonce est affichée autant de fois quelle est commenté exemple : si je commente une annonce 3 fois la ligne correspondant a cette annonce sera affiché 3 fois
    Merci pour l'aide

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2014
    Messages : 208
    Points : 727
    Points
    727
    Par défaut
    Bonjour,

    Oui c'est tes jointures qui provoquent ces doublons.
    Un distinct ne changera rien, vu que les résultats sont différents.

    Il faut changer la structure de ta requête, pour que ça te retourne que le premier commentaire, ou alors appliquer un filtre après ta requête LINQ.

  3. #3
    Membre du Club
    Femme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2013
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 66
    Points : 57
    Points
    57
    Par défaut
    merci Leruas pour la reponse ta raison un distinct na rien pu que veux tu dire par filtre un order by ou plus de parametre dans le where ?
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     var query = (from a in dc.Region 
                            join b in dc.Annonce
                            on a.IdReg equals b.idRegion
                            join z in dc.Annonceur on b.idAnnonceur equals z.IdAnnonceur
                            join e in dc.Commentaire on
                                b.IdAnn equals e.IdAnn
                            where (b.IdAnn == id)
                            select new Ann_Region_Cate { Region = a, Annonce = b, Annonceur = z, Commentaire = e }).
                            OrderBy(e=> e.Commentaire.IdCommentaire);
    un orderby ne change rien aussi

  4. #4
    Membre du Club
    Femme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2013
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 66
    Points : 57
    Points
    57
    Par défaut
    svp comment modifier cette requette sans quelle ne retourne de doublons

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Full-stack
    Inscrit en
    Novembre 2010
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Full-stack

    Informations forums :
    Inscription : Novembre 2010
    Messages : 372
    Points : 489
    Points
    489
    Par défaut
    Bonjour,

    Citation Envoyé par labiko445 Voir le message
    svp comment modifier cette requête sans quelle ne retourne de doublons
    Dis nous quelle valeur te reviens en doublons. Est ce une entité, un attribut. Si possible, dans quelle entité est-elle (l'attribut) contenue ?
    Cordialement.
    La recherche de la connaissance est une Lumière qui apaise le Cœur.
    Si une réponse vous a été utile , n'oubliez pas de voter en cliquant sur:.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Full-stack
    Inscrit en
    Novembre 2010
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Full-stack

    Informations forums :
    Inscription : Novembre 2010
    Messages : 372
    Points : 489
    Points
    489
    Par défaut
    [QUOTE=labiko445;7974819]...voic ma requette qui retourne bien un resultat mais avec une redondance de donnees

    mais comment faire un distinct sur cette requette :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     var query = from a in dc.Region
                            join b in dc.Annonce
                            on a.IdReg equals b.idRegion
                            join z in dc.Annonceur on b.idAnnonceur equals z.IdAnnonceur
                            join e in dc.Commentaire on
                                b.IdAnn equals e.IdAnn
                            where (b.IdAnn == ids )
                            select new Ann_Region_Cate { Region = a, Annonce = b, Annonceur = z,Commentaire = e };
    
                return View(query.ToList());

    .../QUOTE]

    Comme tu viens de le lire, j'ai souligné quelques ambigüité dans ta requête. Soit par exemple:
    ici a est une valeur recherchée dans l'entité Région, il en est de même pour
    ainsi de suite...

    Le Select n'est que le résultat de ce que tu as demandé ou écrit, en l’occurrence:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select new Ann_Region_Cate { Region = a, Annonce = b, Annonceur = z,Commentaire = e }
    Un peu plus haut, tu écrivais:
    ceci veut dire que tu recherches l'entité région a dans la liste des Régions dc.Region.

    Pour rappel, les entités doivent avoir des clés primaires pour plus de maniabilité. Et les sélections des entités devront se faire à partir de leurs clés ou certains attributs.. En clair, l'erreur vient de ton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select new Ann_Region_Cate { Region = a, Annonce = b, Annonceur = z,Commentaire = e }
    Dans ce dernier code:
    -on ne sait d'où sort Ann_Region_Cate. Est ce une entité??
    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Region = a, Annonce = b, Annonceur = z,Commentaire = e
    . Dans cette partie, celle d’où vient probablement les doublons, tu utilise les Entités comme des attributs.

    En clair, tu devrais utiliser de quelconques attributs en lieu et place des Entités, des attributs dans le Select:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select new Ann_Region_Cate { Attribut.Region = Attribut.a, Attribut.Annonce = Attribut.b, Attribut.Annonceur = Attribut.z,Attribut.Commentaire = Attribut.e }
    Cordialement.
    La recherche de la connaissance est une Lumière qui apaise le Cœur.
    Si une réponse vous a été utile , n'oubliez pas de voter en cliquant sur:.

  7. #7
    Membre du Club
    Femme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2013
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 66
    Points : 57
    Points
    57
    Par défaut
    merci pour la reponse Alexandre le Grand
    la valeur qui revient en double c'est toute une ligne dune annonce a savoir le titre ,description ,photo, etc....

    je repete tous se passait bien avec la requette le probleme de doublons est survenus lorsque j'ai rajouté une table commentaire permettant de commenter une annonce lorsque la page detail de celle ci est appellée .
    NB : une annonce est dupliqué autant de fois quelle est commenté donc si une annonce est commentée qu'une seule fois lannonce sera affichée qu'une seule fois si elle possede 100 commentaire elle sera affichée 100 fois (d'ou le probleme)
    voici ce que Anne_Region_Cate contient : juste des getteurs et setteur des objects de la base

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     public string titre { get; set; }
            public Ttypeannonce Ttypeannonce { get; set; }
            public Commentaire Commentaire { get; set; }
            public AnnElectro AnnElectro { get; set; }
            public TypeAnnElectro TypeAnnElectro { get; set; }
            public CateElectro CateElectro { get; set; }
            public Region Region { get; set; }
            public Annonce Annonce { get; set; }
            public Annonceur Annonceur { get; set; }
            public Categorie Categorie { get; set; }
            public Annonce_Auto Annonce_Auto { get; set; }
            public MarqueAuto MarqueAuto { get; set; }
            public TypeAuto TypeAuto { get; set; }
            public CategoAuto CategoAuto { get; set; }
    je pensais que n'est pas une embiguité vue que a possede une reference precise dans le select
    pense tu qu'il me faut changer totalement la structure de la requette ?

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur Full-stack
    Inscrit en
    Novembre 2010
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Full-stack

    Informations forums :
    Inscription : Novembre 2010
    Messages : 372
    Points : 489
    Points
    489
    Par défaut
    Bonjour,

    Veuillez m’excusez pour mon absence. Il serait bon que vous fassiez le distinguo entre vous les appellations des entités. Comme je l'ai indiqué:
    - il est bon de faire les sélections à partir des clés des entités.
    -Pluraliser les noms des entités aidera mieux à faire les requêtes. Pour ce faire, clic droit + Mettre au pluriels ou au singulier les noms d'objets générés.

    Au cas, où tu ne trouverais pas le chemin, tu pourras construire ta requête dans Vue depuis SQL SERVER, et la charger dans ton modèle.

    Cordialement.
    La recherche de la connaissance est une Lumière qui apaise le Cœur.
    Si une réponse vous a été utile , n'oubliez pas de voter en cliquant sur:.

  9. #9
    Membre du Club
    Femme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2013
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 66
    Points : 57
    Points
    57
    Par défaut
    merci mais pense tu que c'est le faits de mettre mes entités aux pluriels ou au singulier qui resolvera le probleme dune requette qui retourne des doublons

    merci pour tes interventions

  10. #10
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    Je ne me suis pas penché sur ta requête plus que ça pour voire d'où vient le problème mais j'ai une solution à te proposer concernant le Distinct, il prend en paramètre un IEqualityComparer<T>, suffit juste que tu définisses le tien pour ta classe Ann_Region_Cate et hop le tour est joué.

Discussions similaires

  1. LINQ to SQL] Tracer les requêtes SQL d'Insert/Update/Delete
    Par annalady dans le forum Accès aux données
    Réponses: 5
    Dernier message: 30/07/2009, 10h17
  2. Colle sur un tri dans une requête linq to sql
    Par boby62423 dans le forum Linq
    Réponses: 5
    Dernier message: 18/03/2009, 10h01
  3. [Linq to SQL] requête complexe faites chauffer vos méninges ;)
    Par anthyme dans le forum Accès aux données
    Réponses: 5
    Dernier message: 06/06/2008, 09h52
  4. [Linq to sql] Problème de requête
    Par Ntotor dans le forum Accès aux données
    Réponses: 4
    Dernier message: 09/05/2008, 20h37
  5. [SQL] Requête Distinct
    Par b_lob dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 13/06/2006, 10h51

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