Случайный запрос Linq - PullRequest
       14

Случайный запрос Linq

2 голосов
/ 27 ноября 2009

как я могу получить случайную строку из выбора в моем запросе linq?

Я пытался:

Bot bot = (from a in dc.Bot
           select a).OrderBy(x => Guid.NewGuid()).First();

Но не работает, я всегда получаю то же самое.

Ответы [ 3 ]

8 голосов
/ 27 ноября 2009

Я бы использовал Пропустить

var query = from a in dc.Bot
            select a;

int random = new Random().Next(query.Count);

Bot bot = query.Skip(random).First();
4 голосов
/ 27 ноября 2009

Примерно так может работать:

var random = new Random();
var allBots = (from a in dc.Bot select a);

var randomAmountToSkip = random.NextInt(allBots.Count());
var anyBot = allBots.Skip(randomAmountToSkip).First()
2 голосов
/ 27 ноября 2009

У меня есть метод расширения для этого в моем архиве :

static class IEnumerableExtensions {

   public static T PickRandomOne<T>(this IEnumerable<T> list, Random rnd) {
      T picked = default(T);
      int cnt = 0;
      foreach (T item in list) {
         if (rnd.Next(++cnt) == 0) {
            picked = item;
         }
      }
      return picked;
   }

}    

Использование:

Random rnd = new Random();
Bot bot = (from a in dc.Bot select a).PickRandomOne(rnd);

Преимущество этого метода в том, что вам не нужно заранее знать, сколько элементов существует, поэтому вам не нужно запускать запрос дважды.

...