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 :

Connaitre le type d'instance d'un object donné


Sujet :

Linq

  1. #1
    Membre averti
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Par défaut Connaitre le type d'instance d'un object donné
    Bonjour tout le monde,
    Bon j'explique le déroulement du processus,
    J'ai une classe personne contenant les champs (id, nom ...)
    Et une classe enseignant et autre stagiaire, qui héritent de la classe personne.
    Un moment donné, j'ai le nom de la personne qui est stocké dans la table personne, alors moi à partir de ce nom je veux connaitre le type de cette personne (enseignant ou bien stagiaire). sachant que le nom est unique.

    Merci beaucoup de votre aide.

  2. #2
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    A partir du nom d'une personne (dans un string), tu peux pouvoir déterminer si c'est un enseignant ou un stagiaire ?!

    Et comment veut-tu qu'on t'aide sans en savoir plus ? Où est l'information qui précise que tel nom de personne est un enseignant ou stagiaire ? Dans ta base de données ? si oui, quelle table ?

    Et au niveau du code C#, tu utilises quoi pour interroger ta base de données ? ADO.NET ? Linq to SQL, Linq to Entities ?

  3. #3
    Membre averti
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Par défaut
    Je me suis mal expliqué,

    J'ai une classe Personne, (id, nom, prenom, tel...)
    Deux autre classe Enseignant et Stagiaire ayant comme attribut que l'Id

    en suite on a le nom de la personne, on va sélectionner l'objet personne ayant ce nom (sachant qu'il est unique) a travers l'expression linq :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Personne personne = db.Personnes.Single(P => P.nom == "xxxx");
    Le problème c'est comment savoir que cette personne est un enseignant ou un stagiaire ?

    Est ce claire ??

  4. #4
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Citation Envoyé par L_Kira Voir le message
    Personne personne = db.Personnes.Single(P => P.nom == "xxxx");

    Le problème c'est comment savoir que cette personne est un enseignant ou un stagiaire ?
    Par rapport à ta requête, tu auras toujours des instances de la classe Personne. Je ne vois pas comment tu pourrais avoir une instance de la classe Enseignant ou Stagiaire.

    Donc, je me répête, il manque des informations pour savoir comment résoudre ton problème.

    Je repose ma précédente question : C'est Linq to SQL que tu utilises ? Ou Entity Framework ?

  5. #5
    Membre averti
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Par défaut
    Bon, moi j'ai l'habitude de développer en Java avec Hibernate,
    on fait un requête HQL presque le même principe que Linq, est on test l'instance la classe, comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Stagiaire S;
    if (personne.isInstenceOf(Stagiaire) == true)
    {
        // et on caste vers Stagiaire
        S = (Stagiaire) personne;
    }
    en .Net, est avec Linq, je ne trouve pas comme faire ce genre de chose ??

  6. #6
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Ce n'est donc pas un problème Linq que tu as

    c'est le mot clé is que tu dois utiliser comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (monObjet is Enseignant)
    {
      Enseignant ens = (Enseignant)mobObjet;
    }
    else if (monObjet is Stagiaire)
    {
       Stagiaire sta = (Stagiaire)monObjet;
    }

  7. #7
    Membre averti
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Par défaut
    il m'affiche le message suivant, on soulignant "personne" :

    The given expression is never of the provider
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
             if (personne is Enseignant)
                        E = (Enseignant) personne;

  8. #8
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Citation Envoyé par L_Kira Voir le message
    il m'affiche le message suivant, on soulignant "personne" :

    The given expression is never of the provider ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
             if (personne is Enseignant)
                        E = (Enseignant) personne;
    Le message d'erreur n'est pas plutôt "Given Expression is Never of the Provided '...' Type" ?

    Il te dit juste que l'instance 'personne' ne pourrait pas être du type Enseignant. Et s'il te dit ça, c'est que ta classe Enseignant ne dérive pas de la classe Personne. C'est juste ce que je dis ?

  9. #9
    Membre averti
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Par défaut
    Exactement,
    Vu moi que j'ai importer mes classes d'un base de données relationnel, il n'y a pas un moyen de préciser l'héritage ??

  10. #10
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Citation Envoyé par L_Kira Voir le message
    Exactement,
    Vu moi que j'ai importer mes classes d'un base de données relationnel, il n'y a pas un moyen de préciser l'héritage ??
    On mélange le relationnel et l'orientée objet. Sans plus d'informations, c'est difficile de pouvoir te répondre.

    Je rerepose ma question : C'est Linq to SQL que tu utilises ? Ou Entity Framework ? Ou autre ?

    Lorsque tu regardes ta table Personne (dans la base de données), sur base de quoi tu sais dire que telle ou telle autre personne est un enseignant ?

  11. #11
    Membre averti
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Par défaut
    Citation Envoyé par Jérôme Lambert Voir le message
    On mélange le relationnel et l'orientée objet. Sans plus d'informations, c'est difficile de pouvoir te répondre.

    Je rerepose ma question : C'est Linq to SQL que tu utilises ? Ou Entity Framework ? Ou autre ?

    Lorsque tu regardes ta table Personne (dans la base de données), sur base de quoi tu sais dire que telle ou telle autre personne est un enseignant ?
    Linq To SQL !!!

  12. #12
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Citation Envoyé par L_Kira Voir le message
    Linq To SQL !!!
    Et comment détermines-tu qu'une entrée dans ta table personne de la base de données est un enseignant ou un stagiaire ?

  13. #13
    Membre averti
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Par défaut
    Citation Envoyé par Jérôme Lambert Voir le message
    Et comment détermines-tu qu'une entrée dans ta table personne de la base de données est un enseignant ou un stagiaire ?
    Dans la base de données, l'ID de personne est AUTO-INCREMENT, par contre pour enseignant ou stagiaire, c'est juste un entier.

    A l'insertion, on crée une nouvelle personne, avec tout les champs, puis on mappe cette personne avec une instance un enseignant, ou stagiaire, et au moment de submit la personne est persister dans la base de données avec ça nouvelle clé, ensuite cette clé sera copier dans la table stagiaire ou enseignant.

    Voila le
    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
     
    DB_Formation_DataContext db = new DB_Formation_DataContext();
     
    Personne Pers = new Personne();
    Pers.nom = txt_Nom.Text;
    Pers.prenom = txt_Prenom.Text;
    Pers.adresse = txt_Adr.Text;
    Pers.telephone = txt_Tel.Text;
    Pers.mail = txt_Mail.Text;
    Pers.login = txt_Login.Text;
    Pers.password = txt_PWD.Text;
     
    Enseignant Ens = new Enseignant();
     
    Pers.Enseignant = Ens;
    db.Personnes.InsertOnSubmit(Pers);
    db.SubmitChanges();

  14. #14
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Tu as une table Enseignant ? Tu as une FK entre Personne et Enseignant ?

  15. #15
    Membre actif
    Profil pro
    Développeur
    Inscrit en
    Novembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Novembre 2009
    Messages : 24
    Par défaut
    Clairement dans ce code, tu ne dis pas que ta personne est un enseignant mais que ta personne a un enseignant.

    Je me rappelle avoir galérer pour faire les classes fille mappé dans d'autre tables avec LinqToSql et j'avais pas réussit: le faire avec LinqToEntities m'as été bien plus simple.

    Surtout que sur le coup, je pouvais pas me permettre de galérer 3h pour le faire.

  16. #16
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Citation Envoyé par TiNano Voir le message
    Je me rappelle avoir galérer pour faire les classes fille mappé dans d'autre tables avec LinqToSql et j'avais pas réussit: le faire avec LinqToEntities m'as été bien plus simple.
    C'est bien ça, avec Linq To SQL, je ne pense pas que ce soit possible ou alors la solution doit être légèrement compliquée. Même si je ne l'ai jamais essayé, je sais de l'avoir entendu lors d'une conférence que c'est par contre possible avec Entity Framework.

  17. #17
    Membre actif
    Profil pro
    Développeur
    Inscrit en
    Novembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Novembre 2009
    Messages : 24
    Par défaut
    Le faire avec LinqToEntities est chose aisé et est expliqué sur ce tutp :

    http://pmusso.developpez.com/tutorie.../introduction/


    au chapite : 2.1.1. Une table par type d'entité

    Après, je sais pas si c'est vraiment impossible de le faire avec LinqToSql, mais je vois pas bien comment.

Discussions similaires

  1. Connaitre le Type d'un Object
    Par thibaud dans le forum C#
    Réponses: 2
    Dernier message: 10/09/2007, 11h39
  2. [CSS][formulaire] connaitre le type d'un champ input
    Par psychomatt dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 22/09/2005, 12h13
  3. Connaitre le type de character set
    Par vbcasimir dans le forum Administration système
    Réponses: 4
    Dernier message: 02/08/2005, 13h02
  4. Réponses: 10
    Dernier message: 27/04/2005, 11h26
  5. Connaitre le type de chaque col d'une table Paradox
    Par mjp dans le forum Bases de données
    Réponses: 2
    Dernier message: 03/02/2005, 21h00

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