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

 

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

Linq - double pass?

Îåêßíçóå áðü ôï ìÝëïò dimos.homatas. Τελευταία δημοσίευση από το μέλος dimos.homatas στις 27-09-2011, 17:28. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  27-09-2011, 15:44 67540

    Linq - double pass?

    Καλησπέρα σας,

    πολλές φορές έχω μπροστά μου την εξής κατάσταση:

    έχω ένα List από objects κάποιου x y z τύπου, και θέλω να κάνω ένα select first, εάν πληρούνται κάποια κριτήρια που δίδονται στο where.

    Το θέμα είναι ότι εάν δεν μπορώ να βάλω first() εάν δεν υπάρχει κάποιο αποτέλεσμα, οπότε πρέπει να αναγκαστώ να ελέγχξω κάποιο count και μετά να ξανακάνω το select, δηλαδή ουσιαστικά να βάλω το πρόγραμμα να κάνει 2 φορές την ίδια δουλειά (προφανώς κάποιο iteration στην ίδια λίστα).

    Και το ερώτημα είναι, υπάρχει κάποιος τρόπος να γίνει αυτή η δουλειά με μία κίνηση;

    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
  •  27-09-2011, 16:51 67541 σε απάντηση της 67540

    Απ: Linq - double pass?

    Δοκίμασε το .FirstOrDefault() => θα σου δώσει αποτέλεσμα το πρώτο αντικείμενο ή null και δεν θα σκάσει...

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  27-09-2011, 17:22 67542 σε απάντηση της 67540

    Απ: Linq - double pass?

    Να πω ότι κατάλαβα τί ρωτάς ...

    Μπορεί να ρωτάς τί να κάνεις αν η First σου χτυπήσει επειδή το where δεν επέστρεψε αποτελέσματα. Σε αυτή την περίπτωση μπορείς να χρησιμοποιήσεις το FirstOrDefault που απλά θα σου γυρίσει null αν η where δεν σου επιστρέψει κάτι.

    Ή μπορεί να ρωτάς τί να κάνεις αν δεν είσαι σίγουρος ότι υπάρχουν αντικείμενα στη λίστα. Καταρχήν το List.Count δεν κοστίζει τίποτε οπότε δεν είναι πρόβλημα να το ελέγξεις. Εκτός και όταν λες "List of objects" εννοείς ένα οποιοδήποτε collection. Επιπλέον, το FirstOrDefault θα δουλέψει το ίδιο είτε υπάρχουν είτε δεν υπάρχουν αντικείμενα στη λίστα.

    Το τί μπορείς να κάνεις σε αυτή την περίπτωση εξαρτάται από το τί ακριβώς θέλεις να πετύχεις:

    • Αν το query εκτελείται αραιά, απλά ελέγχεις το μέγεθος της λίστας και τελειώνεις (ή εκτελείς την FirstOrDefault).
    • Αν θέλεις να περιμένεις μέχρι να μπουν κάποια αντικείμενα στη λίστα, θα πρέπει να χρησιμοποιήσεις κάτι σαν το BlockingCollection.

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  27-09-2011, 17:28 67543 σε απάντηση της 67542

    Απ: Linq - double pass?

    FirstOrDefault, thanks παιδιά!
    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems