Picking random record from Entity Framework database without OrderBy

You can have something like :

personToCall = db.Persons.OrderBy(r => Guid.NewGuid()).Skip(toSkip).Take(1).First();

You should use FirstOrDefault to be mode defensive.

Here the dark lord teaching the force to yoda! what is the world coming to!


First you need to get the random number from 1 to max record, see this

Random rand = new Random();
int toSkip = rand.Next(0, db.Persons.Count());

db.Persons.Skip(toSkip).Take(1).First();

with order by you can use the Guid.NewGuid()

db.Persons.OrderBy(x=>x.Guid.NewGuid()).Skip(toSkip).Take(1).FirstOrDefault();

There is no way to do this without an ordering clause.

personToCall = db.Persons.OrderBy(r => Random.Next()).First();

That could be slow depending on the size of your Persons table, so if you wanted to make this fast, you'd have to add a column to Person, or join it to a dictionary of random numbers and Person keys, then order by that. But that is rarely a wise solution.

Better to ask a higher level question about the overall task at hand.