Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

LINQ - Null reference exception

Îåêßíçóå áðü ôï ìÝëïò alex_VB. Τελευταία δημοσίευση από το μέλος nikolaosk στις 07-11-2009, 14:32. Υπάρχουν 8 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  04-11-2009, 10:40 54922

    LINQ - Null reference exception

    Καλημέρα σε όλους!

    Έχω το εξής πρόβλημα:

    Σε μία LINQ class έχω τους εξής πίνακες (Customer , CustomerCategory)

     

    O πίνακας customer έχει ένα πεδίο category το οποίο είναι foreign key στο πεδίο categid του πίνακα CustomerCategory.

    Μέσα στον κώδικά μου τρέχω το εξής:

    label1.text = Customer.FirstName
    Label2.text = Customer.Surname
    Label3.text = Customer.CustomerCategory.Categdescr

    Όταν έχει τιμή το πεδίο category στον πίνακα Customers δεν έχω κανένα πρόβλημα. Όταν όμως η τιμή του είναι null τοτε έχω Null reference exception.

    Υπάρχει κάτι το οποίο μπορώ να κάνω ώστε να το αποφύγω? 

     


    www.myautos.gr
    Δημοσίευση στην κατηγορία:
  •  04-11-2009, 11:54 54924 σε απάντηση της 54922

    Απ: LINQ - Null reference exception

    μα να ελέγχεις αν είναι null το category. Ένα if θέλεις, ή ψάχνεις κάτι άλλο;
  •  04-11-2009, 12:47 54926 σε απάντηση της 54924

    Απ: LINQ - Null reference exception

    Απλά πιστεύω πως το λάθος είναι κάπου αλλού ή θα υπάρχει κάποια άλλη λύση (ίσως στην σύνταξη). Το να κάνω αυτό είναι το πρώτο πράγμα που έρχεται στο μυαλό. Αυτή ειναι η απάντηση δηλαδή? Όταν το πεδίο είναι null δεν δημιουργείται η κλάση η οποία αντιπροσωπεύει το πεδίο και σκάει η εφαρμογή?

    Εάν δεν έχει προβλεφθεί κάτι και απαιτείται απο το χρήστη να κάνει έλεγχο null τότε οκ δεν έχω κανένα πρόβλημα να προσθέσω τον έλεγχο. Πολύ φοβάμαι όμως οτι θα υπάρχει κάποιος άλλος τρόπος επίλυσης πιο αυτοματοποιημένος.

     

    Ευχαριστώ!


    www.myautos.gr
  •  04-11-2009, 13:25 54927 σε απάντηση της 54926

    Απ: LINQ - Null reference exception

    Μάλλον δεν έχεις καταλάβει τί είναι το LINQ, ή μάλλον τί είναι οι κλάσεις που σου γυρίζει το LINQ. Είναι απλά αντικείμενα, όχι κάποιο είδος interface προς τη βάση. Το LINQ διαβάζει δεδομένα από τη βάση και σου δημιουργεί αντικείμενα τα οποία γεμίζει με αυτά τα δεδομένα.

    Αν ένα πεδίο είναι κενό στη βάση, το αντίστοιχο property στην κλάση θα είναι φυσικά κενό, δηλαδή null. Τί θα περίμενες να γυρίσει ο κώδικας σου? Από τη στιγμή που δεν υπάρχει καμμία εγγραφή CustomerCategory για τον συγκεκριμένο Customer, τί θα μπορούσε να έχει το συγκεκριμένο property πέρα από Null? Τί θα περίμενες να σου γυρίσει η Categdscr όταν δεν υπάρχει καν η αντίστοιχη εγγραφή στη βάση?

    Το πρόβλημα είναι στον κώδικα σου και όχι στο LINQ. Κάτι προσπαθείς να κάνεις με το λάθος τρόπο. Καλό θα είναι να μας πεις τί είναι αυτό που προσπαθείς να κάνεις για να σε βοηθήσουμε.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  04-11-2009, 19:11 54934 σε απάντηση της 54927

    Απ: LINQ - Null reference exception

    Παναγιώτη δεν προσπαθω να κάνω κάτι εκπληκτικό.

    Dim db as new CRMDataContext
    Dim NewCust = (from u in db.customer _
                            where u.customerid = 1 _
                            select u).firstordefault

    Έτσι γεμίζω μια κλάση επιστρέφω ένα αντικειμενο customer και το γεμίζω με δεδομένα από τη βάση μου.

     

    Τώρα αυτό που θέλω να κάνω είναι σε κάποια labels να δώσω τιμές από τις ιδιότητες της κλάσης μου.
    Έτσι:

    label1.text = NewCust.FirstName
    Label2.text = NewCust.Surname
    Label3.text = NewCust.CustomerCategory.Categdescr

    H απάντησή σου με διαφώτισε. Πίστευα πώς αν ήταν null η τιμή του πεδίου της βάσης θα μου επέστρεφε κενό η ακόμα καλύτερα στο LINQ select μου θα υπήρχε κάποια αντίστοιχη function της isnull() ώστε να αποφευχθεί ο έλεγχος σε όλα τα πεδία της βάσης που δέχονται null. Εάν υπάρχει κάτι τέτοιο ή κάποιος άλλος τρόπος να αποφευχθεί ο έλεγχος όλων των nullable πεδίων θα σε παρακαλούσα να τον περάσεις και σε μένα γιατι πρόκειται να δουλέψω με μεγάλη βάση η οποία αποτελείται από μεγάλο πλήθος nullable πεδίων.

     

    Σε ευχαριστώ πολύ!

     

     


    www.myautos.gr
  •  06-11-2009, 22:03 55009 σε απάντηση της 54934

    Απ: LINQ - Null reference exception


    Γενικά , ένα από παράδειγμα για LINQ με Nulls, είναι το παρακάτω όπου βρίσκουμε τους "ανθρώπους χωρίς πόλη"
    var query = from p in db.Person
    
    where p.City == null
    
    select new { p.PersonID, p.Name, p.City };


    Νικόλαος Καντζέλης
    BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT
    http://www.nksolutions.gr
    http://dotnetstories.wordpress.com
    http://weblogs.asp.net/dotnetstories
    http://forum.dotnetnuke.gr
  •  06-11-2009, 22:08 55010 σε απάντηση της 55009

    Απ: LINQ - Null reference exception


    οκ. τώρα είδα ότι παίζεις σε vb.

    1
    2
    3
    4
    5
     
    Dim query = From p In db.Persons _
    
    Where p.City Is Nothing _
    
    Select p.PersonID, p.Name, p.City


    Νικόλαος Καντζέλης
    BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT
    http://www.nksolutions.gr
    http://dotnetstories.wordpress.com
    http://weblogs.asp.net/dotnetstories
    http://forum.dotnetnuke.gr
  •  07-11-2009, 11:57 55016 σε απάντηση της 55010

    Απ: LINQ - Null reference exception

    Σε ευχαριστώ Νίκο αλλά δε κατάλαβα τι θες να δηλώσεις με το παράδειγμά σου αυτό.

     


    www.myautos.gr
  •  07-11-2009, 14:32 55025 σε απάντηση της 55016

    Απ: LINQ - Null reference exception

    Μάλλον κάτι δεν κατάλαβα, καλά σε σχέση με αυτό που ρώτησες...

    νόμισα ότι δεν ξέρεις πως δουλεύουμε με LINQ και Nulls, και αυτά ήτανε απλά παραδείγματα.


    Νικόλαος Καντζέλης
    BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT
    http://www.nksolutions.gr
    http://dotnetstories.wordpress.com
    http://weblogs.asp.net/dotnetstories
    http://forum.dotnetnuke.gr
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems