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 MVC Discussion :

Récupérer les données d'une table liée et les afficher dans une vue.


Sujet :

ASP.NET MVC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2017
    Messages : 18
    Par défaut Récupérer les données d'une table liée et les afficher dans une vue.
    Bonsoir,
    J'ai deux models avec les proprietés suivantes:
    M1: (id, N°)
    M2: (id2, poids,id (clé étrangère))
    La relation entre les deux models est 1 plusieurs (m1 contient plusieurs m2).
    J'aimerais dans l'index de M1 afficher la somme de toutes les poids de M2 afficher par Id. C'est quoi le code à mettre dans le controleur Index? Merci d'avance.

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2015
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2015
    Messages : 70
    Par défaut
    Salut,

    Citation Envoyé par Lotfiphp Voir le message
    J'aimerais dans l'index de M1 afficher la somme de toutes les poids de M2 afficher par Id.
    Pour ça, tu peux faire une requête sur "M2" en faisant un SUM de tes poids et tu regroupes le tout via "id".

    Citation Envoyé par Lotfiphp Voir le message
    C'est quoi le code à mettre dans le controleur Index?
    Attention, Index est une méthode de ton Controller (sauf si ton controller s'appelle "IndexController"). Mais du coup si tu veux afficher ton résultat, tu peux écrire la requête dans la méthode Index et si elle est de type ActionResult, tu n'as qu'à appeler le model M2 dans la vue du même nom que ta méthode (çàd Index) ou stocker le contenu dans un ViewBag que tu pourras utiliser dans ta vue à l'aide d'un foreach!

  3. #3
    Membre chevronné
    Profil pro
    Développeur freelance
    Inscrit en
    Août 2006
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur freelance

    Informations forums :
    Inscription : Août 2006
    Messages : 453
    Par défaut
    Bonjour,

    De ce que j'ai compris voilà comment je l'aurais fait.
    La partie Domain (métier) :
    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
     
    public class M1
    {
        public long id { get; set; }
        public int number { get; set; }
        public List<M2> LstM2 = new List<M2>();
     
        public double PoidsSum()
        {
            return LstM2.Sum(o => o.Poids);
        }
    }
     
    public class M2
    {
        public long id { get; set; }
        public double poids { get; set; }
    }
    Ensuite dans mon service métier (service qui met à disposition des données métier aux autres couches (Controller par exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class ServiceMetier
    {
        public M1 GetM1ById(long id)
        {
             M1 m1;
     
            // Récupération du M1
            m1 = GetSQLM1(id);
     
           return m1;
        }
    }
    Et pour le SQL :
    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
     
    public M1 GetSQLM1(long id)
    {
        var m1 = new M1();
     
        var query = "SELECT * FROM M1 WHERE Id = " + id;
        var result = query.ExecuteSQL(); // Ce n'est pas une vraie méthode mais je te laisse choisir en fonction de ta db.
     
        // on construit l'objet M1
        m1.Id = result["Id"];
        m1.Number = result["result"];
     
       var query2 = "select * from M2 WHERE Id2 = " + id;
       // le résultat peut retourner plusieurs M2
       foreach (var data in query2)
       {
           var m2 = new M2();
           m2.Id = data["Id"];
           m2.Poids = data["Poids"];
     
           m1.LstM2.Add(m2);
       }
     
       return m1;
    }
    Et après dans ton Controller tu appelles la méthode GetM1ById() et tu envoies le résultat à ta vue.
    Le code comme ça ne doit pas forcément fonctionner mais cela représente ce que j'aurais fait dans la globalité.
    Tu peux encore optimiser le code.


    Je t'avoue que je n'ai pas compris ce que tu voulais dire par
    J'aimerais dans l'index de M1 afficher la somme de toutes les poids de M2 afficher par Id.
    Dans ma solution je te propose d'afficher la somme de tous les poids M2 contenu dans ton M1.

    En espérant t'avoir aidé et surtout j'espère avoir compris ta demande.

    Mosco.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2017
    Messages : 18
    Par défaut
    Je vous remercie pour votre réponse, c'est ma première application, peut être j'ai pas bien expliquer mon besoin voici mon code peut être il y a une méthode plus simple:

    Model: M1
    namespace wb01.Models
    {
    using System;
    using System.Collections.Generic;

    public partial class M1
    {
    public M1()
    {
    this.M2 = new HashSet<M2>();
    }

    public int Id { get; set; }
    public int N° { get; set; }
    public string Commentaires { get; set; }
    public int Id_qualité { get; set; }

    public virtual Qualité Qualité { get; set; } //*(Qualité est autre table dans ma BDD)


    public virtual ICollection<M2> M2 { get; set; }
    }
    }
    Model :M2
    namespace wb01.Models
    {
    using System;
    using System.Collections.Generic;

    public partial class M2
    {
    public int Id_M2 { get; set; }
    public string N_wg { get; set; }
    public double Poids { get; set; }

    public int Id { get; set; }

    public virtual M1 M1 { get; set; }
    }
    }
    Le CONTROLEUR :
    namespace wb01.Controllers
    {
    using static wb01.Models.M2;
    public class M1Controller : Controller
    {
    private M1Entities db = new M1Entities();

    // GET: M1

    public ActionResult Index()
    {
    var m1 = db.M1.Include(r => r.Qualité);
    return View(m1.ToList());

    }
    Dans la vue Index, je veux afficher m1.ToList avec une colonne Poids (qui est la somme des poids des M2).

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2017
    Messages : 18
    Par défaut
    Salut:

    Je vous remercie pour votre réponse, c'est vrai Index c'est une méthode dans mon controller M1Controller, et la méthode est de type ActionResult; s'il vous plait c'est quoi le syntaxe de la requête ci-dessous mon code si vous pouvez m'aider

    Model: M1
    namespace wb01.Models
    {
    using System;
    using System.Collections.Generic;

    public partial class M1
    {
    public M1()
    {
    this.M2 = new HashSet<M2>();
    }

    public int Id { get; set; }
    public int N° { get; set; }
    public string Commentaires { get; set; }
    public int Id_qualité { get; set; }

    public virtual Qualité Qualité { get; set; } //*(Qualité est autre table dans ma BDD)


    public virtual ICollection<M2> M2 { get; set; }
    }
    }
    Model :M2
    namespace wb01.Models
    {
    using System;
    using System.Collections.Generic;

    public partial class M2
    {
    public int Id_M2 { get; set; }
    public string N_wg { get; set; }
    public double Poids { get; set; }

    public int Id { get; set; }

    public virtual M1 M1 { get; set; }
    }
    }
    Le CONTROLEUR :
    namespace wb01.Controllers
    {
    using static wb01.Models.M2;
    public class M1Controller : Controller
    {
    private M1Entities db = new M1Entities();

    // GET: M1

    public ActionResult Index()
    {
    var m1 = db.M1.Include(r => r.Qualité);
    return View(m1.ToList());

    }
    Dans la vue Index, je veux afficher m1.ToList avec une colonne Poids (qui est la somme des poids des M2).

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2015
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2015
    Messages : 70
    Par défaut
    Citation Envoyé par Lotfiphp Voir le message
    Dans la vue Index, je veux afficher m1.ToList avec une colonne Poids (qui est la somme des poids des M2).
    En fonction des id de M1 ou la somme totale que tu as dans M2?

    Tu peux essayer ça déjà :

    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
     
    public ActionResult Index()
    {
    var m1 = from m1 in db.M1
    join m2 in db.M2 on m1.Id equals m2.Id
    group new { m1, m2 } by new { m1.Id } into g
    select new { 
    //Ton m1 avec le champ qualite
    g.Sum(x => x.m1.Id).Value
     };
     
    ViewBag.monObjet = m1;
     
    return View();
     
    }
    En espérant que ça t'aide!

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2017
    Messages : 18
    Par défaut
    Citation Envoyé par xKryckx Voir le message
    En fonction des id de M1 ou la somme totale que tu as dans M2?
    En fonction des Id de M1.

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2015
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2015
    Messages : 70
    Par défaut
    Citation Envoyé par Lotfiphp Voir le message
    En fonction des Id de M1.
    Regarde mon post précédent que j'ai mis à jour!

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2017
    Messages : 18
    Par défaut
    Voila ce que j'ai eu quand j'ai essayé avec votre code:



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public ActionResult Index()
    {
    var m1 = from m1 in db.M1
    (Voila le message obtenu:La variable portée "m1" est en conflit avec la déclaration précédente de "m1")

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g.Sum(x => x.m1.Id).Value
    (N'a pas accepté le .Value: ".int ne contient pas de définition pour "Value" et aucune méthode d'extension "Vaue" acceptant un premier argument de type "int"))

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2015
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2015
    Messages : 70
    Par défaut
    Pour ça déjà,

    Citation Envoyé par Lotfiphp Voir le message
    (Voila le message obtenu:La variable portée "m1" est en conflit avec la déclaration précédente de "m1")

    On peut renommer m1 et m2 par monObjet1 et monObjet2.
    Et je pense qu'en modifiant ce problème de nom, ça résoudra sûrement le problème sur le sum.


    EDIT: Le problème vient du "var m1"! Donnez lui juste un autre nom du style, "var maRequete".
    Le nom de votre requête doit juste être différent du nom de vos objets.


    Bonne journée!

Discussions similaires

  1. [MySQL-5.6] trouver des lignes dans une table qui correspondent à certains mots dans une string
    Par trucmuche2005 dans le forum Requêtes
    Réponses: 1
    Dernier message: 07/12/2017, 15h06
  2. Réponses: 2
    Dernier message: 29/09/2009, 15h33
  3. [MySQL] Insérer des données dans une table, mais ce n'est pas une table USER
    Par amerex dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 16/08/2008, 00h01
  4. Accéder à une table dont le nom est dans une table
    Par claralavraie dans le forum Oracle
    Réponses: 7
    Dernier message: 26/12/2006, 15h51
  5. Réponses: 11
    Dernier message: 04/05/2006, 11h50

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