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 :

Performance sur le chargement des données LINQ/WPF


Sujet :

Linq

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 205
    Points : 125
    Points
    125
    Par défaut Performance sur le chargement des données LINQ/WPF
    Bonjour à tous !

    Je récupère l'ensemble des noms d'une machine en deux requêtes
    voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    			_DbAnance = new AnanceDataContext();
    			_Hcs = new ObservableCollection<HC>();
    			var HcList = from Hc in _DbAnance.HC select Hc;
    			foreach (HC MonHc in HcList)
    			{
    				var CustomHcName = (from PrgHc in _DbAnance.PRG_HC
    								 join Prg in _DbAnance.T_ARBO_PRG on PrgHc.PRG_ID equals Prg.PRG_ID
    								 where PrgHc.HC_ID == MonHc.HC_ID
    								 select new { CustomHcName=Prg.PRG_ROOT+PrgHc.HC_ANUM }).ToList();
    				foreach (var Name in CustomHcName)
    					MonHc.CustomHcName += Name.CustomHcName;
    				_Hcs.Add(MonHc);
     
    			}
    comme on peut le voir c'est pas très performant mais pratique puisque je peux faire un foreach directement vue que je recupère que des données de mes machines (HC)

    Mais je sais que je peux faire cette requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    			var HcList2 = from Hc in _DbAnance.HC
    									join PrgHc in _DbAnance.PRG_HC on Hc.PRG_ID equals PrgHc.PRG_ID 
    									join Prg in _DbAnance.T_ARBO_PRG on PrgHc.PRG_ID equals Prg.PRG_ID 
    									select new{Hc, HcName = Prg.PRG_ROOT+PrgHc.HC_ANUM } ;
    Mais du coup je peux plus faire de foreach(HC ....) vu que le type de HcList2 est anonyme
    Donc je pourrais faire un foreach(var MonHc in HcList2)
    Seulement je sais pas comment je peux recupérer mes Hcs puis modifier ma variable CustomHcName comme dans la solution 1


    Si vous avez des idées .... Personnellement j'ai pas trouvé d'exemple similaire sur le net..


    Merci d'avance !!

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Une action n'est pas prévue pour être effectuée en LINQ. C'est pas une opération ensembliste. C'est d'ailleurs pour ca qu'il n'y a pas IEnumerable<T>.ForEach<T>(...) En l'occurence ton affectation "MonHc.CustomHcName += Name.CustomHcName;" est une action.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 205
    Points : 125
    Points
    125
    Par défaut
    Serait il possible, en faisant une seule requete, de scinder, la liste recuperer par linq, en deux pour avoir une liste afin de boucler foreach(hc ... ) et la deuxieme liste serait utilisée à la place de requeter à chaque pour chaque hc ... Qui est Tres couteux...

  4. #4
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Citation Envoyé par lerieure Voir le message
    Serait il possible, en faisant une seule requete, de scinder, la liste recuperer par linq, en deux pour avoir une liste afin de boucler foreach(hc ... ) et la deuxieme liste serait utilisée à la place de requeter à chaque pour chaque hc ... Qui est Tres couteux...
    C'est possible oui, c'est une simple jointure.
    Utilises tu un ORM (Nhibernate, Entity Framework)?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 205
    Points : 125
    Points
    125
    Par défaut
    j'ai SQL Serveur et j'utilise LINQ to SQL. pas de ORM faut il en utiliser pour faire cela ? si oui comment faire si non comment faire aussi xD

    Merci

  6. #6
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Citation Envoyé par lerieure Voir le message
    j'utilise LINQ to SQL. pas de ORM
    Diantre, Linq to SQL est un ORM

    Plus sérieusement, dans ton dbml ou tu as tes tables, tu peux définir les relations entre celles ci (ou plus proprement le faire en bdd via des clefs etrangeres).
    Après tu peux utiliser ces requêtes pour te simplifier la vie et notamment naviguer dans les hierarchies et collections.

Discussions similaires

  1. Linq to Entity Chargement des données depuis SqlServer 2008
    Par ddneuf dans le forum Entity Framework
    Réponses: 0
    Dernier message: 09/10/2012, 13h18
  2. [Flex3] Evénement Tree sur fin de chargement des données..
    Par supernova dans le forum Flex
    Réponses: 2
    Dernier message: 22/07/2010, 13h34
  3. Chargement des données sur mysql
    Par ecom_adil dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 25/02/2008, 17h08
  4. Quiz : testez vos connaissances sur le cryptage des données
    Par SheikYerbouti dans le forum Oracle
    Réponses: 0
    Dernier message: 08/10/2004, 10h06
  5. [Crystal] Performance sur grosses base de données
    Par Nico118 dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 14/11/2003, 15h27

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