Hainesy - Nach deinem Kommentar zu Vinnys Post verkennend, verkennst du, dass du seinen Punkt verpasst ... [Ich präsentiere dies nicht als direkte Antwort auf deine Frage, sondern erläutere nur Vinnys Punkt, den ich klären muss eine mögliche Verwirrung in Bezug auf die oben]
Betrachten Sie dieses Objekt.
public class Person
{
public string FirstName;
public string MiddleInitial;
public string LastName;
public DateTime DateOfBirth { get; set; }
public int Age
{
get
{
return (int)DateTime.Today.Subtract(DateOfBirth).TotalDays/365;
}
}
}
jetzt gehe ich davon aus, eine Liste von Person einrichten genannt Menschen haben
var people = new List<Person>();
Und ich habe Ich habe eine ganze Menge Leute auf meiner Liste.
var sortedByLastName = people.OrderBy(o => o.LastName);
var sortedByFirstName = people.OrderBy(o => o.FirstName);
var sortedByAge = people.OrderBy(o => o.Age);
var sortedByAgeDesc = people.OrderByDescending(o => o.Age);
var sortedByLastThenFirst = people.OrderBy(o => o.LastName).ThenBy(o => o.FirstName);
Das ist für komplexe Objekte. Wenn wir eine Liste von einigen primitiven Typ, wie eine Zeichenfolge haben:
var strings = new List<string>();
Ich möchte sie sortieren basierend auf sich selbst - also nicht durch eine Eigenschaft meiner Objekt
var sorted = strings.OrderBy(s => s);
Dies wird sortieren auf dem Objekt. Sie können die gleiche Idee auch verwenden, wenn Sie komplexe Objekte sortieren, die IComparable zum Sortieren nach ihrem Standardvergleichsprogramm implementieren.
Ein EntitySet kann auf ähnliche Weise sortiert werden, ob für einen primitiven Typ oder ein komplexes Objekt.
Danke, ich bin mir nicht sicher, ob das mich in eine dunkle Gasse bringt. Wenn Sie den Beitrag lesen, mit dem ich mich am Ende der Frage verbunden habe, fehlt wahrscheinlich etwas, was ich im Zusammenhang mit der Datenbindung verstehe. –
Also, nachdem er diesen anderen Beitrag gelesen hatte, machte er den Fehler, .ToList() aufzurufen. Die Bindungsquelle hat wahrscheinlich ihre zugrunde liegende Liste aktualisiert, aber diese Liste war nicht das EntitySet. Durch Aufruf von .ToList wird ein neues Listenobjekt erstellt. BindingList unterstützt das Sortieren ... etwas von einer archaischen Form ... aber es muss belichtet werden. Sie müssten einen BindingList-Wrapper erstellen, der die von GetNewBindingList() zurückgegebenen Whats-Wraps umbrechen und SortPropertyCore und SortDirectionCore verfügbar machen kann. Ich werde eine andere Antwort mit einem Beispiel posten. – jrista
EntitySet implementiert IListSource.GetList() durch Delegieren an die GetNewBindingList(), die Sie erwähnten (und Zwischenspeichern des IBindingList-Ergebnisses). Wenn Sie ein EntitySet über eine BindingSource an ein WinForms DataGridView binden, erhalten Sie automatisch Unterstützung für die Spaltensortierung. Ich weiß nichts über WPF, aber ich hätte gedacht, dass es ähnlich funktionieren würde. –
Lucas