What is the best (and fastest) way to retrieve a random row using Linq to SQL when I have a condition, e.g. some field must be true?
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 partial query to access the table in random order is ...
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:-
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.