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 to Entity] filtrage en cascade (dur dur)


Sujet :

Linq

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    CUCARACHA
    Invité(e)
    Par défaut [Linq to Entity] filtrage en cascade (dur dur)
    Salut,

    Je dois effectuer un filtre en cascade sur une vue dont chaque champ est le résultat d'une requête XQuery.

    La vue permet d'occulter l'XML.

    J'ai mappé ma vue à EF.

    Chaque colonne de ma vue a un Nom qui est utilisé dans une table de conditions (KeyValuePair<string,string>)

    J'ai chargé l'ensemble de mes éléments une première fois.
    J'aimerais arriver à faire un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach (var oCondition in lstConditions) {
        switch (oCondition.Key.Nom) { 
             maVue = maVue.Where(unItem.DontLeChamps[oCondition.Key]==oCondition.Value);
        }
    }
    Je suis pratiquement certain que c'est possible mais je ne trouve pas la syntaxe.

    En cherchant je suis tombé sur
    http://developers.de/blogs/andreas_l...framework.aspx

    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
     
       1: Dictionary<string, string> props = new Dictionary<string, string>();
       2: props.Add("PropA", "abc");
       3: props.Add("PropB", "cde");
       4:  
       5: using (EFTestEntities context = new EFTestEntities())
       6: {
       7:     var items = from item in context.TItem.Include("TItemProp")
       8:                 select item;
       9:  
      10:     foreach (var prop in props)
      11:     {
      12:         items = items.Where(i => (i.TItemProp.Count(ip => ip.PropKey == prop.Key && ip.PropValue == prop.Value)) > 0);
      13:     }
      14:  
      15:     return items.ToList();
      16: }
    Mais je n'arrive pas à l'appliquer à mon cas.

    Ca vous parle ?

    D'avance merci

    Laurent

  2. #2
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    moi j'y connais rien, mais justement, il me semble que là où t'as des expressions lambda, tu peux utiliser des méthodes pour "contruire" cet arbre.

    tu gardes donc sensiblement le même principe de boucle mais tu génère une expression lambda à la volée (comme un StringBuilder en vulgarisant à mort), puis tu la place dans ton Where(exp_lambda).



    ps: le lien que tu donnes ne sembles pas correspondre à ton cas. si tu regardes bien PropKey est un membre de la classe. c'est-à-dire que tes filtres à toi, taperaient toujours sur le même membre de ton objet. Or je suis convaincu que c'est pas ce que tu veux faire car ca ressemble à une recherche multi-critères ton truc.
    Il a pris un mauvais exemple le gus. la seule chose qu'il fait, c'est tester le nom et le prenom de l'objet par exemple, mais avec des valeurs différentes. je sais pas si je suis clair :/

  3. #3
    CUCARACHA
    Invité(e)
    Par défaut Lambada ?
    Au risque de passer pour une buse dont le niveau intellectuel qui rivaliserait avec celui d'une méduse desséchée, je ne connais pas ces lambda expressions...
    C'est sans doute pourquoi tout n'est pas encore très clair le Linq to Entity pour moi...
    Je vais bucher la chose, mais si tu connais des raccourcis, je suis preneur...

    ++

    Laurent

  4. #4
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    on a qu'à lancer le club des buses. J'ai écrit ma première requête linq (avec EF) y a 6 jours. je suis encore plus pourri que toi sur ce coup

    je me rappelle juste la demo de Mitsu sur le C# avancé aux techdays où il editait une expression lambda pour modifier un calcul je crois.
    ce lien pourrait p-e t'aider
    http://msdn.microsoft.com/en-us/library/bb882637.aspx

    après il suffira pas, mais en gros, l'idée est de représenter le filtre par une expression lamdba, expression à laquelle tu peux greffer des "branches", pour former une expression finale qui te servira de filtre.

  5. #5
    CUCARACHA
    Invité(e)
    Par défaut arf
    Salut,

    Merci, déjà que c'était fatigant, là ça donne carrément mal à la tête. En plus cet aprèm j'ai codé une proc stock, j'ai noté que j'étais un peu rouillé à cause de ces 4 mois d'EF (Attention de ne pas tout oublier quand même).

    Le truc qui me bluffe le plus c'est quand même les .SaveChanges()

    Je vais bucher l'exemple que tu m'as passé.

    (Je sais que ça ne se fait pas trop de dire ça mais je trouve que ça manque une rubrique EF dans C# et dans VB. C'est vrai qu'il faut des contributeurs mais c'est vraiement une techno qui monte, comme MVC).

    ++

    Laurent

  6. #6
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    le sous-forum sera fait en temps et en heure . Pour le moment, il y a les tags, et ils sont bien suffisants. ca a été discuté et tant que ce n'est pas assez utilisé, c'est plus gênant pour les utilisateurs d'avoir trop de sous-forums.

Discussions similaires

  1. [LINQ] - créer une requete dynamique (pas en dur)
    Par DonJR dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 08/06/2007, 11h30
  2. [LINQ] - créer une requete dynamique (pas en dur)
    Par DonJR dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 08/06/2007, 11h30
  3. Pthread et stdio dur dur
    Par greg13 dans le forum Linux
    Réponses: 3
    Dernier message: 21/03/2006, 23h56
  4. Dur dur Mandriva et Nvidia
    Par Cazaux-Moutou-Philippe dans le forum Mandriva / Mageia
    Réponses: 5
    Dernier message: 19/03/2006, 04h07
  5. [hard core] requête dur dur
    Par heid dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 14/02/2006, 12h39

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