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 :

Probleme avec Linq to DataSet et valeur nulle


Sujet :

Linq

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 34
    Points : 21
    Points
    21
    Par défaut Probleme avec Linq to DataSet et valeur nulle
    Bonjour
    Je débute avec Linq to Dataset et je rencontre un probleme avec les valeurs null et les types de données int32.

    Voici les caractéristiques de mon projet :
    - Visual studio 2010 express
    - Langage visual basic
    - Base access2007

    si j'écris la requete Linq suivante pas de probleme j'ai bien ma liste d'articles qui s'affiche :

    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
    Public Class Form1
     
        Private ds As New LocDataSet
        Private taArticles As New LocDataSetTableAdapters.ArticlesTableAdapter
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            taArticles.Fill(ds.Articles)
     
            Dim daArticles As DataTable = ds.Tables("Articles")
     
            Dim query = From art In daArticles.AsEnumerable() _
                Select New With _
                       { _
                            .id = art.Field(Of Int32)("IdArticle"), _
                            .code = art.Field(Of String)("CodeArticle"), _
                            .modèle = art.Field(Of String)("Modèle") _
                       }
     
            Me.DataGridView1.DataSource = query.ToList
     
     
        End Sub
    End Class




    Par contre si dans le Select j'ajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    .....
               .modèle = art.Field(Of String)("Modèle"), _
                            .idFamille = art.Field(Of Int32)("IdFamille") _
                       }
                      ......
    Dans ce cas, la requete me renvoie aucun enregistrement et ma liste est vide !
    Car (je penses) il y a des des enregistrements qui ont comme valeur de champ IdFamille=null (la base accepte les valuer nulle pour ce champ)

    Effectivement, si je remplis le champ IdFamille pour tous les enregistrements alors la requete me retourne bien les valeurs demandées.


    comment faire faire pour afficher les champs int32 avec des valeurs nulles ?

    Merci de vos reponses car j'en peux plus de chercher

  2. #2
    Membre éprouvé Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Points : 1 118
    Points
    1 118
    Par défaut
    Bonjour,

    essaye de le rendre nullable, je ne connais pas la syntaxe en VB mais en c# on aurais art.Field(typeof(Int32?)) le ? rend nullable. Ou alors tu as peut etre une méthode .FirstOrDefault() du genre art.Field(Of Int32).FirstOrDefault()

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 34
    Points : 21
    Points
    21
    Par défaut
    MERCI, MERCI ET BRAVO !!

    C'est exactement ça

    la syntaxe sous vb.net est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...   .famille =art.Field(Of int32?)("IdFamille")
    Je vais enfin pourvoir utiliser Linq

    Encore merci


  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    les nullables en VB.NET et C# ont la même écriture à un détail prêt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim val as type? 
    type? val;
     
    Dim val as Nullable(Of type)
    Nullable<type> val;
    voilà c'est sensiblement identique, surtout au niveau de la forme de l'opérateur.
    malheureusement ca n'est pas le cas pour l'opérateur de fusion null.

    en C# on utilise "nullable ?? defaut"
    en VB.NET "If (nullable, defaut)"

    vous l'aurez compris l'écriture VB.NET est pénible car dans le genre je nuis grièvement à la lisibilité on fait guère mieux.

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

Discussions similaires

  1. [Débutant] Cross Join avec Linq to Dataset
    Par Drakonis dans le forum VB.NET
    Réponses: 1
    Dernier message: 06/07/2012, 10h07
  2. Réponses: 3
    Dernier message: 21/06/2011, 13h32
  3. Probleme avec LINQ
    Par mr.net dans le forum Général Dotnet
    Réponses: 13
    Dernier message: 26/03/2009, 16h56
  4. probleme avec dataadapter et dataset.
    Par HULK dans le forum ASP.NET
    Réponses: 22
    Dernier message: 11/06/2007, 09h08
  5. problem avec la recherche d'une valeur dans les table
    Par anilane dans le forum Bases de données
    Réponses: 6
    Dernier message: 25/05/2007, 19h35

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