Подтвердить что ты не робот

Случайный элемент List <T> из LINQ SQL

в С#.net 3.5 Я получаю Linq всех моих пользователей из моей таблицы пользователя.

Теперь я верну случайный пользователь из этого списка, как это сделать?

4b9b3361

Ответ 1

Вот так:

var rand = new Random();
var user = users[rand.Next(users.Count)];

Ответ 2

Используйте ElementAt:

var rand = new Random();
var user = users.ElementAt( rand.Next( users.Count() ) );

Ответ 3

для Entity Framework или Linq 2 Sql, может использовать этот метод расширения

public static T RandomElement<T>(this IQueryable<T> q, Expression<Func<T,bool>> e)
{
   var r = new Random();
   q  = q.Where(e);
   return q.Skip(r.Next(q.Count())).FirstOrDefault();
}
// persons.RandomElement(p=>p.Age > 18) return a random person who +18 years old
// persons.RandomElement(p=>true) return random person, you can write an overloaded version with no expression parameter

Ответ 4

Почему бы не создать общий помощник и/или расширение?!

namespace My.Core.Extensions
{
    public static class EnumerableHelper<E>
    {
        private static Random r;

        static EnumerableHelper()
        {
            r = new Random();
        }

        public static T Random<T>(IEnumerable<T> input)
        {
            return input.ElementAt(r.Next(input.Count()));
        }

    }

    public static class EnumerableExtensions
    {
        public static T Random<T>(this IEnumerable<T> input)
        {
            return EnumerableHelper<T>.Random(input);
        }
    }
}

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

        var list = new List<int>() { 1, 2, 3, 4, 5 };

        var output = list.Random();

Ответ 5

Класс Random может использоваться для генерации псевдослучайных чисел. Используйте его для генерации случайного числа в пределах допустимых индексов в вашем массиве или списке.

Random rand = new Random();
var user = Users[rand.Next(Users.Count)];

Если вы хотите увидеть больше примеров, я создал несколько случайно ориентированных расширений LINQ и опубликовал их в статье Расширение LINQ с произвольными операциями.

Ответ 6

Как насчет чего-то подобного?

var users = GetUsers();
var count = user.Count();
var rand = new System.Random();
var randomUser = users.Skip(rand.Next(count)).FirstOrDefault();