Linq Orderby random ThreadSafe for use in ASP.NET

asp.net, asp.net-mvc, linq, s#arp-architecture

Solution

One way to achieve efficiently is to add a column to your data `Shuffle` that is populated with a random int (as each record is created).

The query to access the table then becomes ...

Random random = new Random();
int seed = random.Next();
result = result.OrderBy(s => (~(s.Shuffle & seed)) & (s.Shuffle | seed)); // ^ seed);

This does an XOR operation in the database and orders by the results of that XOR.

Advantages:-

- Efficient: SQL handles the ordering, no need to fetch the whole table

- Repeatable: (good for testing) - can use the same random seed to generate the same random order

- Works on most (all?) Entity Framework supported databases

This is the approach used by my home automation system to randomize playlists. It picks a new seed each day giving a consistent order during the day (allowing easy pause / resume capabilities) but a fresh look at each playlist each new day.

Problem

i'm using Asp.net MVC with Sharp Architecture. I have this code: ``` return _repositoryKeyWord.FindAll(x => x.Category.Id == idCAtegory) .Take(50).ToList(); ``` How can i order by random? Note: i don't want to order the 50 extracted items, i want order before and then extract 50 items. thks

Original source