Πώς μπορώ να πάρετε μια ξεχωριστή, διέταξε λίστα με τα ονόματα από ένα DataTable χρησιμοποιώντας LINQ;

ψήφοι
83

Έχω ένα DataTableμε μια Nameστήλη. Θέλω να δημιουργήσει μια συλλογή από τα μοναδικά ονόματα αλφαβητικά. Το ακόλουθο ερώτημα αγνοεί τη σειρά με ρήτρα.

var names =
    (from DataRow dr in dataTable.Rows
    orderby (string)dr[Name]
    select (string)dr[Name]).Distinct();

Γιατί το orderbyνα μην πάρει επιβληθεί;

Δημοσιεύθηκε 01/08/2008 στις 14:14
πηγή χρήστη
Σε άλλες γλώσσες...                            


7 απαντήσεις

ψήφοι
51

Το πρόβλημα είναι ότι η Ξεχωριστά φορέας δεν χορηγεί ότι θα διατηρήσει την αρχική σειρά των τιμών.

Έτσι, το ερώτημά σας θα πρέπει να λειτουργήσει σαν αυτό

var names = (from DataRow dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy( name => name );
Απαντήθηκε 01/08/2008 στις 14:18
πηγή χρήστη

ψήφοι
30

Για να γίνει πιο κατανοητή και διατηρήσιμη, μπορείτε επίσης να χωριστεί σε πολλαπλές δηλώσεις LINQ.

  1. Κατ 'αρχάς, επιλέξτε τα δεδομένα σας σε μια νέα λίστα, ας το ονομάσουμε x1, κάνει μια πρόβλεψη, εάν είναι επιθυμητό
  2. Στη συνέχεια, δημιουργήστε μια ξεχωριστή λίστα, από x1μέσα x2, χρησιμοποιώντας ό, διάκριση που χρειάζεστε
  3. Τέλος, να δημιουργήσετε μια αριθμημένη λίστα, από x2μέσα x3, διαλογή από ό, τι επιθυμείτε
Απαντήθηκε 04/09/2008 στις 03:57
πηγή χρήστη

ψήφοι
8
var sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);
Απαντήθηκε 05/12/2008 στις 02:08
πηγή χρήστη

ψήφοι
5

Δοκιμάστε τα εξής:

dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);
Απαντήθηκε 28/04/2013 στις 10:27
πηγή χρήστη

ψήφοι
1

Δοκιμάστε την ακόλουθη

var names = (from dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy(name => name);

Αυτό θα πρέπει να εργαστεί για ό, τι χρειάζεστε.

Απαντήθηκε 07/08/2008 στις 03:35
πηγή χρήστη

ψήφοι
0

Μπορείτε να χρησιμοποιήσετε κάτι τέτοιο:

dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);
Απαντήθηκε 25/06/2018 στις 10:56
πηγή χρήστη

ψήφοι
0

Για την αφηρημένη: όλες οι απαντήσεις που έχουν κάτι κοινό.

OrderBy πρέπει να είναι η τελική πράξη.

Απαντήθηκε 30/01/2018 στις 16:19
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more