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 :

problème de jointures multiple et problème sur CopyToDataTable


Sujet :

Linq

  1. #1
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    415
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 415
    Points : 138
    Points
    138
    Par défaut problème de jointures multiple et problème sur CopyToDataTable
    Bonjour,

    Je n'arrive pas à trouver un exemple (clair pour moi en tout cas) afin de faire plus d'une jointure sur deux tables d'un DataSet.

    En effet, je déclare mes deux DataTable comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DataTable dtImbalance = new DataTable();
    DataTable dtImbalanceDetail = new DataTable();
     
    dtImbalance = ...DataSource.Tables["Imbalance"];
    dtImbalanceDetail = ...DataSource.Tables["ImbalanceDetail"];
    Ensuite, j'ai trouvé cela pour faire avec une jointure:
    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
     
    EnumerableRowCollection<DataRow> imbalances = dtImbalance.AsEnumerable();
    EnumerableRowCollection<DataRow> details = dtImbalanceDetail.AsEnumerable();
     
    var query =
                    from i in imbalances
                    join d in details
                       on i.Field<DateTime>("zzz") equals d.Field<DateTime>("zzz")
                    select new
                    {
                       aaa = i.Field<int>("aaa"),
                       bbb = i.Field<string>("bbb"),
                       ccc = d.Field<string>("ccc"),
                       ddd = d.Field<int>("ddd")
                    };
    Sauf qu'ici donc, ma jointure ne doit pas se faire uniquement sur "zzz", mais sur deux autres champs "yyy" et "xxx" tous deux contenus dans mes DataSet dtImbalance et dtImbalanceDetail.

    Ma première question donc : comment insérer mes deux jointures manquantes?

    Je veux ensuite récupérer le résultat de ma requête et j'ai trouvé ceci comme manière de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DataTable dtFinal = query.CopyToDataTable();
    Problème, ça ne compile pas, me disant que la méthode CopyToDataTable n'existe pas.

    Deuxième question donc : Pourquoi? et que dois-je modifier dans ma requête afin que cette méthode soit reconnue ou alors comment puis-je récupérer autrement le résultat de ma requête?

    Merci beaucoup pour votre aide,
    Julien

  2. #2
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    415
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 415
    Points : 138
    Points
    138
    Par défaut
    J'ai trouvé une réponse qui fait ce que je désire mais qui ne marche pas dans mon cas, je m'explique : Voilà la proposition:
    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
    var query =
                    from i in imbalances
                    join d in details
                       on new { i.zzz,
                                     i.yyy,
                                     i.xxx } 
                            equals new { d.zzz,
                                         d.yyy,
                                         d.xxx}
                    select new
                    {
                       aaa = i.Field<int>("aaa"),
                       bbb = i.Field<string>("bbb"),
                       ccc = d.Field<string>("ccc"),
                       ddd = d.Field<int>("ddd")
                    };
    Le problème, c'est que je n'ai pas accés directement à i.zzz ou d.zzz
    Et lorsque je remplace par exemple i.zzz par i.Field<DateTime>("zzz") ça ne compile pas plus.
    Je suis bloqué et je ne vois plus quoi essayer...
    D'avance merci donc pour votre éclairage,
    Julien

  3. #3
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    415
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 415
    Points : 138
    Points
    138
    Par défaut
    La manière de faire en VB à l'air d'être la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var query =
                    from i in imbalances
                    join d in details
                       on i.Field<DateTime>("zzz") equals d.Field<DateTime>("zzz")
               and i.Field<DateTime>("xxx") equals d.Field<DateTime>("xxx")
                    ...
    Mais ça ne compile pas en C#. J'ai essayé de remplacer le "and" par "&&", mais pas plus de résultat...

  4. #4
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    le and fait partie de la syntaxe linq, donc tu ne devrais pas avoir à le remplacer.

    As-tu un message d'erreur et si oui, lequel ?

    Pour la méthode CopyToDataTable, c'est une méthode d'extension pour les IEnumerable<T> où T est un DataRow : http://msdn.microsoft.com/fr-fr/library/bb396189.aspx

    Donc si tu ne sélectionne pas un DataRow, tu ne peux pas le faire.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  5. #5
    Membre habitué
    Avatar de jgard
    Profil pro
    Inscrit en
    Août 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 67
    Points : 140
    Points
    140
    Par défaut
    Non le "and" ne fonctionne pas en C# dans un join. Je vois juste une différence par rapport aux requêtes que je fais. Je donne un nom aux membres du new. Essaie comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var query =
                    from i in imbalances
                    join d in details
                       on new { Fields1 = i.zzz,
                                     Field2 = i.yyy,
                                     Field3 = i.xxx } 
                            equals new {Field1 = d.zzz,
                                         Field2 = d.yyy,
                                         Field3 = d.xxx}

  6. #6
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    415
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 415
    Points : 138
    Points
    138
    Par défaut
    Bonjour jgard,
    Merci pour ta réponse.
    Le problème c'est que comme je disais mon i.zzz ou d.yyy par exemple ne sont pas reconnus, je ne peux pas appeller directement par le noms de mes colonnes, elles ne sont pas reconnues comme des attributs directs du DataSet, il semble que je doive passer par une écriture du genre i.Field<DateTime>("zzz")
    Pour info, le message d'erreur que j'ai quand j'utilise i.zzz est le suivant:
    Error 2 'System.Data.DataRow' does not contain a definition for 'zzz' and no extension method 'zzz' accepting a first argument of type 'System.Data.DataRow' could be found (are you missing a using directive or an assembly reference?) C:\Projets\...\DepositPositionImbalanceExterne.cs 43 36 ...Deposit
    Et le message d'erreur quand j'utilise une syntaxe comme i.Field<DateTime>("zzz") à la place est le suivant:
    Error 2 Invalid anonymous type member declarator. Anonymous type members must be declared with a member assignment, simple name or member access. C:\Projets\...\DepositPositionImbalanceExterne.cs 64 25 ...Deposit

  7. #7
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Apparemment, i est de type DataRow, donc si tu n'as pas accès à tes cellules via une propriété, tente tout simplement avec le nom de la colonne entre crochets : i["zzz"].

    Avec un ToString() ou une conversion si besoin.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  8. #8
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    415
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 415
    Points : 138
    Points
    138
    Par défaut
    Bonjour laedit,
    Merci pour ta réponse.
    Quand j'écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EnumerableRowCollection<DataRow> imbalances = dtImbalance.AsEnumerable();
    Je défini bien un DataRow justement, donc c'est pour ça que je ne comprends pas pourquoi je n'ai quand même pas accés à la méthode CopyToDataTable...

  9. #9
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    415
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 415
    Points : 138
    Points
    138
    Par défaut
    Merci laedit,
    J'ai essayé ta syntaxe i["zzz"] et j'ai le message d'erreur suivant:
    Error 2 Invalid anonymous type member declarator. Anonymous type members must be declared with a member assignment, simple name or member access. C:\Projets\...\DepositPositionImbalanceExterne.cs 45 29 ...Deposit
    Ce qui est bizarre c'est qu'à la complétion, VS me propose bien cette syntaxe, mais à la compile il me met malgré tout l'erreur indiquée ci-dessus...

  10. #10
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Pour l'erreur de compilation, cela peut venir d'ailleurs. Tu as bien le SP1 du framework ?

    Pour la méthode CopyToDataTable, ce n'est pas parce que la source est un Enumerable<DataRow> que tu auras des DataRow dans ton résultat.

    Si on examine ta requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var query =
                    from i in imbalances
                    join d in details
                       on i.Field<DateTime>("zzz") equals d.Field<DateTime>("zzz")
                    select new
                    {
                       aaa = i.Field<int>("aaa"),
                       bbb = i.Field<string>("bbb"),
                       ccc = d.Field<string>("ccc"),
                       ddd = d.Field<int>("ddd")
                    };
    On voit que tu créé un objet anonyme, et non une DataRow. Donc il est tout à fait normal que tu n'ai pas accès à cette méthode.

    Il faudrait que tu créés un nouveau DataRow et que tu lui passe les informations que tu veux, ou que tu sélectionne dorectement le DataRow ce qui ne t'arrange pas vu que tu veux des données de différentes tables, ou alors que tu fasse une boucle sur ton résultat afin de remplir une DataTable, tout simplement.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  11. #11
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    415
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 415
    Points : 138
    Points
    138
    Par défaut
    Alors les dernières nouvelles...:
    J'ai résolu une partie de mon problème en typant mes dataset, datatables et datarows, afin de pourvoir accéder directement à mes données par attributs. Cela donne :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    deposit_position_imbalance.ImbalanceDataTable dtImbalance;
    deposit_position_imbalance.ImbalanceDetailDataTable dtImbalanceDetail;
     
    dtImbalance = (deposit_position_imbalance.ImbalanceDataTable)(((deposit_position_imbalance)(dataManager.GetConfig(grid1).ParentDataSource)).Imbalance);
    dtImbalanceDetail = (deposit_position_imbalance.ImbalanceDetailDataTable)(((deposit_position_imbalance)(dataManager.GetConfig(grid1).ParentDataSource)).ImbalanceDetail);
     
    EnumerableRowCollection<deposit_position_imbalance.ImbalanceRow> imbalances = dtImbalance.AsEnumerable();
    EnumerableRowCollection<deposit_position_imbalance.ImbalanceDetailRow> details = dtImbalanceDetail.AsEnumerable();
     
                    var query =
                        from i in imbalances
                        join d in details
                            on new
                            {
                                i.zzz,
                                i.xxx,
                                i.yyy
                            }
                            equals new
                            {
                                d.zzz,
                                d.xxx,
                                d.yyy
                            }
                        select new
                        {
                            aaa = i.aaa,
                            bbb = i.bbb,
                            ccc = d.ccc,
                            ddd = d.ddd
                        };
    Maintenant j'ai toujours le souci pour traiter mon résultat final :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dep_pos_imbalance_detail.TableDataTable dtFinal = (dep_pos_imbalance_detail.TableDataTable)query.CopyToDataTable();
    laedit, tu me dis de créer un nouveau datarow et que je lui passe les résultats de ma requête. Peux-tu me dire comment faire cela s'il te plaît?

    Ou alors tu proposes de boucler sur mon résultat afin de remplir ma datatable, mais comment puis-je faire pour boucler sur le résultat de ma requête?

    NB : Le fait que je crée un objet anonyme n'est pas une volonté de ma part, c'est ma première requête en LINQ et je tatonne donc... Peut-être faut-il donc que je ne crée pas un objet anonyme? Que dois-je modifier à ma requête pour parvenir à cela si c'est nécessaire?

  12. #12
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Créer directement des DataRow via ta requête LINQ est trop complexe je pense, vu qu'il faudrait d'abord créer et configurer le DataTable qui recueillerait les DataRow pour ensuite créer des DataRow via sa méthode NEwRow().

    Pour boucler sur le résultat, il te suffit de faire un for ou un foreach :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach (var item in result)
    Pour éviter de créer un objet anonyme, il suffit de préciser le type derrière le nex, comme pour une instanciation normale
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  13. #13
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    415
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 415
    Points : 138
    Points
    138
    Par défaut
    En fait en lieu de 'result', c'est 'query' ce qui me manquait pour boucler en effet. C'est ce que je voulais dire par 'je ne sais pas sur quoi boucler'. Merci.

    Par contre s'il y a un moyen en remplissant directement dans ma datatable, je suis preneur.
    En effet, je possède déjà la structure de table, elle est dans un xsd et est ce que je définis par dep_pos_imbalance_detail.TableDataTable. J'ai donc aussi déjà accès à un dep_pos_imbalance_detail.TableRow. La partie suivante de mon code correspond exactement aux metadata de dep_pos_imbalance_detail.TableDataTable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select new
                        {
                            aaa = i.aaa,
                            bbb = i.bbb,
                            ccc = d.ccc,
                            ddd = d.ddd
                        }
    Peux-tu me donner une syntaxe pour effectuer cela donc directement avec des DataRow afin qu'ensuite mon CopyToDataTable puisse fonctionner s'il te plaît?

    Est-ce que si je veux remplir directement ma datatable via la construction direct de mes datarows, c'est là où je dois justement ne pas utiliser d'objet anonyme?
    J'ai donc essayé pour ce faire de rajouter comme tu me dis le nom de mon objet row, à savoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select new dep_pos_imbalance_detail.TableRow
                        {
                            aaa = i.aaa,
                            bbb = i.bbb,
                            ccc = d.ccc,
                            ddd = d.ddd
                        }
    Mais il me donne alors l'erreur suivante :
    Error 1 '...dep_pos_imbalance_detail.TableRow' does not contain a constructor that takes '0' arguments C:\Projets\...Deposit\DepositPositionImbalanceDetail.cs 193 28 ...Deposit
    Je vois qu'une completion me propose DataRowBuilder comme argument de "new dep_pos_imbalance_detail.TableRow(" mais là je ne vois vraiment pas ce que je suis supposé faire, car ce n'est pas censé être un objet que je dois utilisé directement (dixit le hint de VS2008)... et je ne vois pas non plus comment je pourrais l'intégrer exactement à ma requête LINQ.

    Merci de me donner ce petit coup de main si tu as encore un peu de patience pour ce sujet.
    Cordialement,
    Julien

  14. #14
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Essaye avec un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select dep_pos_imbalance_detail.TableDataTable.NewRow()
    {
        aaa = i.aaa,
        bbb = i.bbb,
        ccc = d.ccc,
        ddd = d.ddd
    }
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    Par défaut
    Mmh, là comme ça, le plus simple, de loin, pourrait être quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var query = from DataRow i in imbalances.Rows
                from DataRow d in details.Rows
                where i["zzz"] == d["zzz"] && i["yyy"] == d["yyy"] && i["xxx"] == d["xxx"]
                select new[] { i["aaa"], i["bbb"], d["ccc"], d["ddd"] };
     
    foreach (var values in query)
    {
    	finalTable.LoadDataRow(values, true);
    }
    Pouvoir utiliser CopyToDataTable, c'est un peu plus sioux. Il faut donc que ton select retourne des DataRows créées par finalTable.NewRow() qui ne permet pas d'initialiser les lignes en même temps. Mais tu peux toujours faire une méthode (éventuellement d'extension si c'est fréquent) qui sert à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private DataRow CreateRow(DataTable table, DataRow i, DataRow d)
    {
    	var row = table.NewRow();
    	row.ItemArray = new[] { i["aaa"], i["bbb"], d["ccc"], d["ddd"] };
    	return row;
    }
    et du coup tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var query = from DataRow i in imbalances.Rows
                from DataRow d in details.Rows
                where i["zzz"] == d["zzz"] && i["yyy"] == d["yyy"] && i["xxx"] == d["xxx"]
                select CreateRow(finalTable, i, d);
     
    query.CopyToDataTable(finalTable, LoadOption.OverwriteChanges);
    Bien sûr du coup c'est dommage de ne pas pouvoir faire l'ajout dans la table en même temps. Enfin c'est possible, mais juste très laid. À ne pas faire. Et le foreach reste plus simple.

    Et enfin, est-ce que tu as vraiment besoin d'une DataTable comme résultat ? Parce que ce serait encore plus simple de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var query = from DataRow i in imbalances.Rows
                from DataRow d in details.Rows
                where i["zzz"] == d["zzz"] && i["yyy"] == d["yyy"] && i["xxx"] == d["xxx"]
                select new Item(i, d);
    Be wary of strong drink.
    It can make you shoot at tax collectors, and miss.

  16. #16
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    415
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 415
    Points : 138
    Points
    138
    Par défaut
    Merci pour vos différents commentaires.
    J'ai pu progresser dans ma tâche grâce à cela.
    Néanmoins, je me pose encore la question de l'utilité de passer par un EnumerableRowCollection<DataRow> via l'appel à AsEnumerable() alors que je me suis rendu compte que l'on peut faire du LINQ avec la DataTable directement. J'avais copié un exemple de la MSDN au départ c'est pour ça. Vous avez une idée?

    Et sinon j'ai un problème encore avec mes jointures en fait lorsque des valeurs sont à nulles, mais je vais commencer un nouveau sujet là-dessus car j'ai fait tout un prog de test afin de bien préciser le problème et ça risque d'être trop mélangé ici autrement.
    A tout de suite suite sur mon nouveau sujet du coup j'espère... :-)
    Encore merci,
    Julien

  17. #17
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Des problèmes avec des valeurs null il y en a déjà qui sont évoqués dans le forum, fais une recherche

    Pour l'utilité du EnumerableRowCollection<DataRow>, si t'as l'occase de travailler directement avec la DataTable n'hésite pas, ça ne t'apporte rien de plus.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  18. #18
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    415
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 415
    Points : 138
    Points
    138
    Par défaut
    C'est effectivement ce que je suis en train de voir.
    De plus, il semble que ce ne soit pas un problème lié à linq mais au designer de Visual Studio qui ne permet pas les valeurs nulles pour les types autres que String lorsque l'on travaille avec un dataset typé.
    Ok pour les datatables, je vais passer par là c'est plus lisible. J'étais curieux de connaître la différence qu'il y avait avec AsEnumerable()....
    Encore merci,
    Julien

  19. #19
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Les deux ont des fonctions précises, mais dans le cas actuelle, tu veux juste pouvoir effectuer une requête Linq dessus, donc autant parer au plus rapide et au plus lisible
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

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

Discussions similaires

  1. Problème avec jointures multiples.
    Par Veritas5 dans le forum Développement
    Réponses: 3
    Dernier message: 05/06/2009, 15h42
  2. [SQL2005][TSQL]Problème de jointures multiples
    Par Veritas5 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/03/2009, 17h04
  3. Problème de jointure multiple
    Par Max_be dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/10/2007, 21h39
  4. Problème de Jointure sur 2 tables
    Par Andry dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/05/2006, 13h20
  5. problème requête à jointure multiple...
    Par Ricardo_Tubbs dans le forum Access
    Réponses: 6
    Dernier message: 09/02/2006, 16h45

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