如何使用 Linq 从列表中获取两条随机记录?
问问题
1436 次
5 回答
3
Random rnd = new Random();
var sequence = Enumerable.Range(1, 2).Select(n => lst[rnd.Next(0, lst.Count)]).ToList();
于 2012-04-09T03:51:36.030 回答
3
因为Linq-to-Objects
它EF4
很简单
db.Users.OrderBy(r => Guid.NewGuid()).Take(2)
对于Linq-to-SQL
您可以查看这篇文章
http://michaelmerrell.com/2010/03/randomize-result-orders-in-t-sql-and-linq-to-sql/
将映射到 SQL 函数的函数 Random 添加NEWID
到 DataContext。
partial class DataContext
{
[Function(Name = "NEWID", IsComposable = true)]
public Guid Random()
{
throw new NotImplementedException();
}
}
用法
var qry = from row in DataBase.Customers
where row.IsActive
select row;
int count = qry.Count();
int index = new Random().Next(count);
Customer cust = qry.Skip(index).FirstOrDefault();
于 2012-04-09T04:18:48.690 回答
2
没有直接的方法。你可以试试这个,虽然不漂亮。
int randomRecord = new Random().Next() % List.Count(); //To make sure its valid index in list
var qData = List.Skip(randomRecord).Take(1);
var qValue = qData.ToList().First();
于 2012-04-09T03:46:19.640 回答
0
这最终对我有用,它确保不返回重复项:
public List<T> GetRandomItems(List<T> items, int count = 3)
{
var length = items.Count();
var list = new List<T>();
var rnd = new Random();
var seed = 0;
while (list.Count() < count)
{
seed = rnd.Next(0, length);
if(!list.Contains(items[seed]))
list.Add(items[seed]);
}
return list;
}
于 2019-03-29T04:08:51.970 回答
-1
为什么要使用Linq 来获取两条随机记录?
创建一个 Random 实例并获取两个随机数,其值小于列表的长度。
List 具有 Indexer 属性,因此 List[index] 成本不高。
保持简单。总是更喜欢可读性。如果您只是让事情变得复杂,那么将要维护您的代码的程序员将很难过。
我只是想知道您为什么要在Linq中执行此操作?这对我来说似乎是一种开销。
我错过了什么吗?
于 2012-04-09T03:59:09.847 回答