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 :

LINQ clause where + ID entity


Sujet :

Linq

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 436
    Par défaut LINQ clause where + ID entity
    Bonjour à vous amis développeur ! Cela fait un petit moment que je n'ai pas eu de question à poser car j'avais délaissé le côté LINQ to SQL pour toute requête utilisant des jointures ou trop complexe en utilisant des procédures stockées.

    Mais j'ai un peu de temps devant moi car je suis en avance sur mon cahier des charges donc je peux me permettre qq modifications (ou entrainement appelez ça comme vous le voulez

    Afin d'alléger le trafic réseau, je souhaite retourner une partie de mes objets entity. En effet certaines de mes tables de la DB contiennent plus de 100 champs (par exemple un patient). Or il y a des endroits dans mon application ou je dois afficher la liste des noms des patients. Et je ne souhaite pas retourner x lignes * y champs mais xlignes * 2 champs (idPatient et nomPatient par exemple)

    (voir code ci dessous)

    Cela ne pose aucun problème avec un SELECT new Patient { idPatient = p.idPatient .....} mais comme idPatient est une clé primaire, je ne peux pas l'affecter ! En gros idPatient = p.idPatient m'est impossible sauf si je décoche la propriété Primary Key du champs sous visual studio.

    Pour l'instant j'ai désactiver les clés primaires. Mais cela ne me plait pas :/ Donc si vous avez une solution je suis preneur.

    Une deuxième question concerne l'insertion de clause if dans ma requête. Comment faire un swich case ou if dans une clause where en fonction d'un paramètre passé ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    if (typeEmploye == "c")
    {
       return (from e in dbc.EMPLOYE
    	join u in dbc.USERS on e.EMP_ID equals u.USR_EMP_ID
    	where u.USR_EST_COMMERCIAL == 1
    	select new EMPLOYE {EMP_ID = e.EMP_ID, EMP_NOM = e.EMP_NOM}).ToList();		
    }
    else
    {
    	return (from e in dbc.EMPLOYE
    	select new EMPLOYE { EMP_ID = e.EMP_ID, EMP_NOM = e.EMP_NOM}).ToList();
    }

    Merci à vous, cordialement, et désolé si mon post n'est pas au bon endroit.
    Nk54

  2. #2
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    En effet certaines de mes tables de la DB contiennent plus de 100 champs
    Une table contient des colonnes pas des champs

    Le problème viens du fait que vous ne passez pas par des objets métiers mais directement vos objets ENTITES...

    Instanciez un objet métier le problème est résolu...
    Sinon vous pouvez passer par des VUES SQL (c'est ce que je met en place pour mes développeurs, il ne doivent jamais attaquer une table directement)...


    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CREATE VIEW dbo.V_EMPLOYE_DISPLAY AS
    SELECT ID,NOM
    FROM EMPLOYE

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Par défaut
    Bonjour,

    Voici un exemple montrant comment utiliser plusieurs where conditionnels :

    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
     
    IQueryable<Tier> matches = MylinqDataContext.Tiers.OrderBy(tie=> tie.NumTiers);
     
    if(Condition1)
    {
           matches = matches.Where(tie => tie.Prospect==false);
    }
    else
    {
        matches = matches.Where(tie => tie.Prospect==true);
    }
     
     
    List<Tier> clients = (from tie in matches select tie).ToList();
    }
    List<Tier> clients = (from tie in matches select tie).ToList();
    étant la ligne ou la requête est finalement exécutée.

    Voici un lien qui devrait t'aider : Requêtes conditionnelles LINQ

Discussions similaires

  1. XML et LINQ - Clause WHERE
    Par JLuc01 dans le forum VB.NET
    Réponses: 3
    Dernier message: 15/11/2013, 00h45
  2. LINQ avec plusieurs clauses WHERE et C#
    Par Cedric33 dans le forum Linq
    Réponses: 23
    Dernier message: 22/11/2011, 14h29
  3. Clause Where en link to entity
    Par anthride dans le forum Entity Framework
    Réponses: 14
    Dernier message: 15/06/2011, 08h40
  4. [Linq to SQL] Clause Where dynamique
    Par Kamishu dans le forum Accès aux données
    Réponses: 2
    Dernier message: 14/08/2008, 14h17
  5. [LINQ To SQL] Clauses WHERE dynamiques
    Par SaumonAgile dans le forum Accès aux données
    Réponses: 7
    Dernier message: 23/02/2008, 01h11

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