Eine Möglichkeit, effizient zu erreichen, ist eine Spalte, um Ihre Daten Shuffle
hinzuzufügen, die mit einem zufälligen int aufgefüllt wird (wie jeder Datensatz erstellt wird).
Die Abfrage der Tabelle dann für den Zugriff wird ...
Random random = new Random();
int seed = random.Next();
result = result.OrderBy(s => (~(s.Shuffle & seed)) & (s.Shuffle | seed)); //^seed);
Dies macht eine XOR-Operation in der Datenbank und Aufträge durch die Ergebnisse dieser XOR.
Vorteile: -
- Effizient: SQL nimmt die Ordnung, keine Notwendigkeit, die ganze Tabelle
- wiederholbar zu holen: (gut für Prüfung) - kann das gleiche Zufall Saatgut verwenden zu erzeugen die gleiche Zufalls Reihenfolge
- funktioniert auf den meisten (alle?) Entity Framework unterstützt Datenbanken
Dieser Ansatz wird von meinem Heimautomatisierungssystem verwendet, um Wiedergabelisten nach dem Zufallsprinzip zu sortieren. Es wählt jeden Tag ein neues Seed aus, das eine beständige Reihenfolge während des Tages gibt (was einfache Pause-/Wiederaufnahmekapazitäten erlaubt), aber jeden Tag einen neuen Blick auf jede Playlist.
Wollen Sie sagen, dass Sie die gesamte Liste randomisiert möchten und dann die ersten 50 Elemente abrufen möchten? –
Diese Frage dupliziert die verknüpfte Frage nicht. Diese Frage weist speziell auf ASP.NET hin, für das ein ThreadSafe-Direktzugriff erforderlich ist. Die verknüpfte Frage erwähnt ThreadSafe nicht –