2016-11-17 3 views
0

Ich habe eine Tabelle mit zwei Spalten Person genannt: (PersonId - Taste, PersonName)Wie SortiertNach in EntityFramework verwenden

Ich versuche, alle Personen, die von PersonName bestellt abzurufen.

Der folgende Code nicht mein Ergebnis bestellen:

var persons = from p in MyContext.Persons.OrderBy(x=>x.PersonName) select p; 

var res = persons.Distnct().ToArray(); 

Ist es möglich, die Reihenfolge in dieser Stufe durchzuführen (ich weiß, dass die OrderBy in die zweite Reihe zu bewegen - nach der Auswertung - den Auftrag tun) ?

Antwort

3

Linq Dokumentation sagt:

Die Distinct (...) Methode eine ungeordnete Sequenz zurückgibt, enthält keine doppelten Werte

So Bestellung ist nicht garantiert, um gleich zu bleiben.
Wenn Sie nach .Distinct() eine garantierte Bestellung benötigen, ist Ihre einzige Option, .OrderBy() erneut anzuwenden.

Referenz:
https://msdn.microsoft.com/en-us/library/bb348436(v=vs.110).aspx

0

Try this:

var result = (from p in MyContext.Persons 
        select new 
        { 
         p.PersonName 
        }).Distinct().OrderBy(x => x.PersonName).ToArray(); 

Lösung ohne LINQ

var result = MyContext.Persons.Select(a => new { a.name }).Distinct().OrderBy(a => a.name).ToArray(); 
+0

Ihr 'Distinct' wird die Reihenfolge von' OrderBy' zerstören. Sie sollten ihre Reihenfolge umkehren. – Sefe

1

Sie können sowohl umfassen, um durch und deutlich in einer einzigen Abfrage. Es funktioniert gut für mich:

var persons = MyContext.Persons.OrderBy(x => x.Name).Select(x => x.Name).Distinct(); 

Wenn Sie es in ein Array konvertieren möchten, dann verwenden Sie ToArray() -Methode.

Verwandte Themen