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 list : cas de nothing [Débutant]


Sujet :

Linq

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2006
    Messages : 128
    Points : 61
    Points
    61
    Par défaut Linq To list : cas de nothing
    Bonjour,

    Je fais mes premiers pas en Linq, pas évident au début ;-)

    surtout quand je commence avec une récursive ;-)

    je viens de réussir à récupérer ce que je voulais : mettre dans une liste d'objet mon résultat.
    Sauf que je voudrais dans ma "sous rubrique" avoir "nothing" (je suis en vb.net) à la place d'un list( of) ne comportant aucun objet

    Je pourrais tout aussi bien avant le return tester si ma variable "mesRubriques" contient des données et retourner nothing, mais est-il possible de l'intégrer directement dans le linq ?

    Voici mon 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
            ' === Get Rubriques
     
            Dim rb As List(Of Rubrique) = GetRubrique()
            ' ===
     
        Public Function GetRubrique(Optional idRubriqueParent As Byte = 0) As List(Of Rubrique)
     
            Dim DataContext As New BilanDataDataContext
            Dim mesRubriques As List(Of Rubrique) = Nothing
     
            mesRubriques = (From rubrique In DataContext.tBG_Rubrique
                    Where rubrique.idRubriqueParent = idRubriqueParent
                    Select New Rubrique With
                        {
                            .Id = rubrique.idRubrique,
                            .IdGrpRubrique = rubrique.idGrpRubrique,
                            .Code = rubrique.code,
                            .Libelle = rubrique.libelle,
                            .SousRubrique = GetRubrique(rubrique.idRubrique)
                        }).ToList
     
            Return mesRubriques
     
        End Function
    Merci pour votre aide.

    Vincent.
    -----------------------------------------
    à l'origine PHP/Mysql. Pro : Asp.net/Vb/SQL/Webform siteweb

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    je ne pense pas

    il y a bien if() oiu iif() mais autant écrire une ligne de plus avec un vrai if

    pour info si tu débutes sur linq, tout ce qui est linq retourne un ienumerable
    ienumerable est à la base de pas mal de collections (de list aussi) et ne permet que la lecture (pas de .add et autres)
    .tolist permet de ramener ca en list et de récupérer l'ajout et autres

    par contre ienumerable a quelques avantages, et quelques pièges
    il est calculé lors de l'évaluation
    c'est seulement quand quelqu'un voudra lire dedans qu'il sera exécuté, donc quand on a une fonction qui retourne un ienumerable elle va le faire instantanément et c'est l'appelant qui s'il la parcours exécutera le code (attention si les collections ont changé, ou si on change de thread)
    .tolist fait que la collection est évaluée tout de suite donc annule l'"asynchronisme"

    sur un ienumerable on peut rajouter des clauses
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim a = (from ...)
    a = a.concat(autre chose)
    a = a.where(condition)
    tout ceci sera exécute en une seule fois (moins de passes donc plus rapide) (et seulement lors de la lecture aussi)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2006
    Messages : 128
    Points : 61
    Points
    61
    Par défaut
    Merci pour toutes ces informations précieuse qu'il va me falloir garder dans un coin de la tête.
    Notamment la partie asynchrone / thread que je n'ai pas l'habitude/occasion d'utiliser dans mes projets.

    Je vais donc faire mon autre solution, tester le retour de la fonction pour mettre nothing le cas échéant.
    -----------------------------------------
    à l'origine PHP/Mysql. Pro : Asp.net/Vb/SQL/Webform siteweb

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    tu peux le faire dans la fonction plutot qu'au retour de la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If mesRubriques.Count = 0 Then Return Nothing
    Return mesRubriques
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    En c# tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var x = (From rubrique In DataContext.tBG_Rubrique
                    Where rubrique.idRubriqueParent = idRubriqueParent
                    Select New Rubrique With
                        {
                            .Id = rubrique.idRubrique,
                            .IdGrpRubrique = rubrique.idGrpRubrique,
                            .Code = rubrique.code,
                            .Libelle = rubrique.libelle,
                            .SousRubrique = GetRubrique(rubrique.idRubrique)
                        }).DefaultIfEmpty(null);

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

Discussions similaires

  1. LINQ to list d'objets
    Par samiou_ dans le forum Linq
    Réponses: 5
    Dernier message: 15/09/2014, 17h03
  2. [C#] Requete Linq sur List<Tuple<String,Guid>>
    Par jubourbon dans le forum Linq
    Réponses: 3
    Dernier message: 29/03/2011, 10h00
  3. Réponses: 0
    Dernier message: 24/10/2007, 20h29
  4. [cast] dans le cas d'une Std::list
    Par ZaaN dans le forum SL & STL
    Réponses: 9
    Dernier message: 26/10/2006, 10h07

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