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

C# Discussion :

RowFilter avec LINQ


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut RowFilter avec LINQ
    Bonjour

    En utilisant un dataview j'ai fait un filtre AND dans ce genre ci
    (de mémoire)

    Quelqu'un a-t-il une meilleure proposition ?
    Merci de vos suggestions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    StringFilter []Keys=Key.Split(' ');
     
    DataView dv=new DataView(MyTable);
     
    for (i=0;i<Keys.Lenght;i++)
    {
      string where=String.Format("where name like %{0}%",Keys[i]);
      dv.RowFilter=where;
      dv=new DataView(dv.ToTable);
    }

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Par défaut
    Salut,

    euh j'ai pas bien compris le problème ?

  3. #3
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut

    Il n'y a pas vraiment de problème, je me demandais simplement si Link n'offrait pas de meilleure possibilité pour faire ca ! ?

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Par défaut
    Si je suis bien ton code, tu souhaites avoir plusieurs filtres like sur un table d'après un tableau contenant les critères ?

    Link
    Linq ?

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par olibara Voir le message
    Il n'y a pas vraiment de problème, je me demandais simplement si Link n'offrait pas de meilleure possibilité pour faire ca ! ?
    argh... Linq, pas Link

    Ben déjà, même sans utiliser Linq, il y a moyen de faire beaucoup plus propre et plus efficace...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    StringFilter []Keys=Key.Split(' ');
    StringBuilder filters =  new StringBuilder();
    foreach(var key in keys)
    {
        if (filters.Length > 0)
            filters.Append(" and ");
        filters.AppendFormat("name like %{0}%", key);
    }
    DataView dv = new DataView(MyTable, filters.ToString(), null, DataViewRowState.CurrentRows);
    C'est quand même mieux que de recréer une DataTable et une DataView intermédiaire pour chaque clé

    On pourrait le faire avec Linq, mais dans un cas comme ça ce serait pas tellement plus pratique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var query = MyTable.AsEnumerable();
    StringFilter []Keys=Key.Split(' ');
    foreach(var key in Keys)
    {
        // Si MyTable est une table d'un DataSet fortement typé :
        query = query.Where(row => row.name.Contains(key.ToString()));
     
        // Si MyTable est une table d'un DataSet non typé :
        // query = query.Where(row => row.Field<string>("name").Contains(key.ToString()));
    }
    DataView dv = query.AsDataView();

  6. #6
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Heu ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    filters.AppendFormat("where name like %{0}%", key);
    Tu est certain de ta syntaxe where ?

    Chez moi ca donne

    Missing operand after 'Name' operator.
    J'avais déja eu le cas avant
    Et c'est precisément pour ca que j'ai opté pour ma boucle avec un filtre simple sans where et sans and

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string.Format("Name LIKE '%{0}%'", elm[i]);

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par olibara Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    filters.AppendFormat("where name like %{0}%", key);
    Tu est certain de ta syntaxe where ?
    Euh, copier/coller un peu rapide
    C'est corrigé

    Mais c'est ton filtre qui était faux à la base, y a jamais de "where" dans un filtre de dataset

  8. #8
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut

    La syntaxe correcte est sans le where et avec les quotes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Name LIKE '%truc%' and Name LIKE '%machin%'
    Merci en tout cas de m'avoir remis sur la piste !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/01/2009, 12h23
  2. couche accé DATA avec LINQ
    Par rdh123 dans le forum C#
    Réponses: 2
    Dernier message: 28/12/2008, 07h16
  3. Problème avec Linq
    Par watiero dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 04/12/2008, 23h25
  4. Débuter concrètement avec LinQ
    Par demando77 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 25/11/2008, 19h17
  5. DropDownList avec LINQ et ID
    Par victormarbach dans le forum Accès aux données
    Réponses: 2
    Dernier message: 21/07/2008, 09h40

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