Linq выберите случайную строку

У меня есть таблица под названием Quotes в linq-to-sql, которая содержит 2 столбца: автор и цитата. Как вы выбираете оба столбца случайной строки?

Ответы

Ответ 1

Random rand = new Random();
int toSkip = rand.Next(0, context.Quotes.Count);

context.Quotes.Skip(toSkip).Take(1).First();

Ответ 2

Если вы выполняете Linq-to-Objects и не нуждаетесь в этом для работы с SQL, вы можете использовать ElementAt() вместо более подробного Skip(toSkip).Take(1).First():

var rndGen = new Random(); // do this only once in your app/class/IoC container
int random = rndGen.Next(0, context.Quotes.Count);
context.Quotes.ElementAt(random);

Ответ 3

Я сделал это примерно так:

list.ElementAt(rand.Next(list.Count());

Я запустил кучу случайных операций, включая select и shuffle, в качестве методов расширения. Это делает их доступными, как и все другие методы расширения коллекции.

Вы можете увидеть мой код в статье Расширение LINQ со случайными операциями.

Ответ 4

Вот один из способов добиться того, что вы хотите сделать:

var quotes = from q in dataContext.Quotes select q;
int count = quotes.Count();
int index = new Random().Next(count);
var randomQuote = quotes.Skip(index).FirstOrDefault();

Ответ 5

1 Сначала создайте класс с атрибутом rend

public class tbl_EmpJobDetailsEntity
{
    public int JpId { get; set; }
    public int rend
   {
    get
      {
        Random rnd = new Random();
        return rnd.Next(1, 100);
      }
    }
}

2 Запрос Linq

var rendomise = (from v in db.tbl_EmpJobDetails
select new tbl_EmpJobDetailsEntity
{
   JpId=v.JpId
}).OrderBy(o=>o.rend);