Warum behält IOrderedEnumerable die Reihenfolge nach dem Filtern bei?

Ich habe eine Vereinfachung des Themas erstellt. Ich habe einen geordneten IEnumerable. Ich frage mich, warum das Anwenden eines Where-Filters die Reihenfolge der Objekte aufheben kann.

Dies wird nicht kompiliert, obwohl es das Potenzial haben sollte,

IOrderedEnumerable<int> tmp = new List<int>().OrderBy(x => x);
//Error Cannot Implicitly conver IEnumerable<int> To IOrderedEnumerable<int>
tmp = tmp.Where(x => x > 1);

Ich verstehe, dass es keine garantierte Ausführungsreihenfolge geben würde, wenn Sie von einem IQueryable stammen, z. B. wenn Sie linq für einen DB-Provider verwenden.

Wenn Sie sich jedoch mit Linq To Object befassen, welches Szenario könnte auftreten, das Ihre Objekte in Unordnung bringt, oder warum wurde dies nicht implementiert?

BEARBEITE

Ich verstehe, wie man das ordentlich bestellt, das ist nicht die Frage. Meine Frage ist eher eine Entwurfsfrage. Ein Where-Filter für linq to -Objekte sollte das give enumerable auflisten und die Filterung anwenden. Warum können wir also nur einen IEnumerable anstelle eines IOrderedEnumerable zurückgeben?

BEARBEITE

Um das Szenario zu klären, in dem dies nützlich wäre. Ich erstelle Abfragen basierend auf Bedingungen in meinem Code. Ich möchte so viel Code wie möglich wiederverwenden. Ich habe eine Funktion, die ein OrderedEnumerable zurückgibt, aber nachdem ich das zusätzliche angewendet habe, wo ich dieses neu anordnen müsste, obwohl es in seinem ursprünglichen bestellten Zustand wäre

Antworten auf die Frage(8)

Ihre Antwort auf die Frage