Πολλαπλά "order by" σε LINQ

Έχω δύο πίνακες, κινηματογραφικές ταινίες και κατηγορίες, και λαμβάνω μια ταξινομημένη λίστα με βάση το categoryID πρώτα και στη συνέχεια με βάση το Name.

Ο πίνακας ταινιών έχει τρεις στήλες ID, Όνομα και CategoryID. Ο πίνακας category έχει δύο στήλες ID και Name.

Δοκίμασα κάτι σαν το παρακάτω, αλλά δεν λειτούργησε.

var movies = _db.Movies.OrderBy( m => { m.CategoryID, m.Name })
Λύση

Αυτό θα πρέπει να δουλέψει για εσάς:

var movies = _db.Movies.OrderBy(c => c.Category).ThenBy(n => n.Name)
Σχόλια (17)

Χρησιμοποιώντας μη-lambda, σύνταξη ερωτημάτων LINQ, μπορείτε να το κάνετε αυτό:

var movies = from row in _db.Movies 
             orderby row.Category, row.Name
             select row;

[EDIT to address comment] Για να ελέγξετε τη σειρά ταξινόμησης, χρησιμοποιήστε τις λέξεις-κλειδιά ascending (η οποία είναι η προεπιλεγμένη και επομένως όχι ιδιαίτερα χρήσιμη) ή descending, όπως παρακάτω:

var movies = from row in _db.Movies 
             orderby row.Category descending, row.Name
             select row;
Σχόλια (4)

Προσθέστε "new":

var movies = _db.Movies.OrderBy( m => new { m.CategoryID, m.Name })

Αυτό λειτουργεί στο κουτί μου. Επιστρέφει κάτι που μπορεί να χρησιμοποιηθεί για την ταξινόμηση. Επιστρέφει ένα αντικείμενο με δύο τιμές.

Παρόμοιο, αλλά διαφορετικό από την ταξινόμηση με βάση μια συνδυασμένη στήλη, ως εξής.

var movies = _db.Movies.OrderBy( m => (m.CategoryID.ToString() + m.Name))
Σχόλια (12)