linq选择一个随机行

时间:2011-01-30 04:05:30

标签: linq

我在linq-to-sql中有一个名为Quotes的表,其中包含2列:author和quote。如何选择随机行的两列?

6 个答案:

答案 0 :(得分:39)

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

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

答案 1 :(得分:7)

如果您正在使用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);

答案 2 :(得分:4)

我这样做了:

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

我将一堆随机操作(包括select和shuffle)作为扩展方法。这使它们像所有其他集合扩展方法一样可用。

您可以在文章Extending LINQ with Random Operations中看到我的代码。

答案 3 :(得分:1)

以下是实现目标的一种方法:

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();

答案 4 :(得分:0)

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);

答案 5 :(得分:0)

尝试:

list.OrderBy(x => Guid.NewGuid()).Take(1).first();