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 :

Fonction + Linq


Sujet :

Linq

  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Mai 2007
    Messages : 22
    Par défaut Fonction + Linq
    Bonjour,

    je travaille actuellement sur un petit projet, et j'ai choisi d'utiliser C# et Linq.

    Mon problème est sûrement tout bête, mais je n'ai pas trouvé la solution sur Google ou sur le forum, et çà m'embête tellement çà doit être tout con.

    Actuellement j'ai çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    var req = from m in Articles.dsArticles.MODELE
                 where m.DSGMOD == dsgmod
                 select new
                 {
                     Nummod = m.NUMMOD
                 };
    foreach (var r in req)
    {
        nummod = r.Nummod;
    }
    et j'aimerai plutot utiliser une fonction renvoyant le resultat de la requete Linq, du genre :

    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
    18
    19
     
    private static ????? retourneValeur() {
     
         var req = from m in Articles.dsArticles.MODELE
                                  where m.DSGMOD == dsgmod
                                  select new
                                  {
                                      Nummod = m.NUMMOD
                                  };
         return req;
    }
     
    public static void main() {
        var res = retourneValeur();
        foreach (var r in res)
        {
            nummod = r.Nummod;
        }
    }
    Si quelqu'un avait une solution à m'apporter, çà serait vraiment très sympa, merci à tous.

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Tu ne peux pas faire ca normalement: étant donné que tu ne connais pas le type à renvoyé (var).

    J'ai vu récemment une solution pour le faire mais je ne la retrouve plus

  3. #3
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Mai 2007
    Messages : 22
    Par défaut
    Merci beaucoup pour ta réponse si rapide !!!

    Faut absolument que je trouve une solution, car j'aimerai adopter une structure MVC, et que donc les requêtes soient dans un fichier .cs autre que le main.

    Merci encore en tout cas, si jamais tu retrouves, jsuis plus que preneur, car sur le net, j'ai rien trouvé, à croire que c'est tellement con comme soluce que tout le monde sait le faire sauf moi

  4. #4
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Salut.

    Essai de renvoyer un IEnumarable<MonTypeD'object> , normalement, ça passe quitte à faire un

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Par défaut
    J'ai pas LINQ sous la main, donc je ne peux pas tester, mais de tête je pense que ça peut passer en retournant un IQuerytable .

  6. #6
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Mai 2007
    Messages : 22
    Par défaut
    Keihilin, pour le IQueryable, çà ne semble pas fonctionner, j'ai fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public static IQueryable essai(Int32 nummod)
            {
                var req = from m in Articles.dsArticles.MODELE
                          where m.NUMMOD == nummod
                          select new
                          {
                              Dsgmod = m.DSGMOD
                          };
                return req;
            }
    Celà me renvoie l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cannot implicitly convert type 'System.Data.EnumerableRowCollection<AnonymousType#1>' to 'System.Linq.IQueryable'. An explicit conversion exists (are you missing a cast?)
    Je vais tester la solution de dev01 après le repas, je vous tiens bien entendu au courant Merci beaucoup.

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Salut,

    il existe un trick (pas tres beau certes, mais bon) :

    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
    18
    19
        public class Program
        {
            static void Main()
            {
                object o = ReturnFunction();
                var v = Cast(o, new { Name = string.Empty, Location = string.Empty });
            }
     
            private static object ReturnFunction()
            {
                return new { Name = "Julien", Location = "France" };
            }
     
            private static T Cast<T>(object o, T type)
            {
                return (T)o;
            }
     
        }
    Comme dit precedemment, c'est pas vraiment joli, donc si on peut eviter les var (avec une vrai classe connue à la compil), il vaut mieux.

    Bon courage. =)

  8. #8
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Mai 2007
    Messages : 22
    Par défaut
    Ouaaah, çà me parait effectivement pas très chouette cette soluce

    En tout cas, çà a le mérite de faire avancer le schmilblik comme qui dirait.

    La soluce de dev01 n'a pas fonctionné pour moi non plus, soit j'ai pas réussi (car effectivement je ne suis pas une star en IEnumerable et compagnie), soit çà ne fonctionne pas.

    C'est quand même fou que çà soit si complexe à mettre en oeuvre, tout çà pour une fonction, çà paraît tout bête pourtant

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Par défaut
    Je suis pourtant certain d'avoir fait fonctionner un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    IQueryable<TonTypeObjet> GetTonObjet()
    {
        return
            from c in dc.CollectionDeTonObjet
            select c;
    }

  10. #10
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Mai 2007
    Messages : 22
    Par défaut
    Aaah oui ok, mais je suis en Linq to Dataset, pas en Linq to Object.

    Je n'ai pas créé d'objet puisque j'ai récupéré toutes mes données de SQL Server dans un DataSet.

  11. #11
    Membre émérite

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Par défaut
    Citation Envoyé par steftanguy Voir le message
    Aaah oui ok, mais je suis en Linq to Dataset, pas en Linq to Object.

    Je n'ai pas créé d'objet puisque j'ai récupéré toutes mes données de SQL Server dans un DataSet.
    les DataSet c'est mal !

  12. #12
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Mai 2007
    Messages : 22
    Par défaut
    Rhoooo

    Tu utilises quoi toi ? Tu transmets ta base de données provenant d'un SGBD à des objets ? Ou autre ?

    Ca m'intéresse grandement si tu peux m'expliquer ta façon de faire

  13. #13
    Membre émérite

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Par défaut
    ben on va sortir du sujet, mais en gros oui; j'utilise exclusivement des reader pour construire des objets.

    J'ai pris l'habitude depuis la version 1.0 de ne pas utiliser les DataSet (ou alors très rarement et pas pour des objets métiers), principalement pour des question de lourdeur et donc de performances. Cela dit, je ne remet pas en cause leur côté pratique.

  14. #14
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Mai 2007
    Messages : 22
    Par défaut
    Effectivement, on peux faire comme çà aussi oui.

    Allez, j'aime tellement çà, que je fini mon projet avec les DataSet (sans appel de fonctions), et zou, je recommence tout avec ta méthode en "Linq to Object".

    Grand merci encore pour votre aide et votre disponibilité, même si çà n'aboutit pas forcément pour le moment

  15. #15
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Citation Envoyé par steftanguy Voir le message
    La soluce de dev01 n'a pas fonctionné pour moi non plus, soit j'ai pas réussi (car effectivement je ne suis pas une star en IEnumerable et compagnie), soit çà ne fonctionne pas.
    Ma solution fonctionne si tu réuni 2 conditions :
    - Tu connais le type d'objet retourné par ta requete Linq
    - Tu sais utiliser les generiques (IEnumerable<T> en l'occurence )

  16. #16
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Mai 2007
    Messages : 22
    Par défaut
    Ok, je vais mettre un résolu dans ce cas, car pour mon cas personnel je n'utilise pas d'objet ici, et je ne maîtrise absolument pas les IEnumerable (je vais m'y mettre très sérieusement du coup parce que çà mérite apparement )

    Merci à tout le monde.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/01/2012, 16h32
  2. Fonction pour une liste avec XML to Linq
    Par Pelote2012 dans le forum Linq
    Réponses: 5
    Dernier message: 24/01/2012, 18h55
  3. Réponses: 8
    Dernier message: 12/04/2011, 22h39
  4. Réponses: 1
    Dernier message: 08/12/2009, 12h18

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