从项目列表中选择单个随机项目

时间:2012-07-24 16:38:11

标签: linq linq-to-sql random

我有一个返回结果列表的查询。我想从该列表中选择一个随机项目。

var query = (from...
            where...
            select q).Random(1); //Something like this?

怎么做?假设我想要选择一个项目。如果还有更多,那么我希望以随机顺序选择其中一个。

3 个答案:

答案 0 :(得分:4)

var query = (from...
            where...
            orderby Guid.NewGuid()
            select q).First();

答案 1 :(得分:0)

您可以利用Shuffle中发布的Randomize a List in C#示例与LINQ Take方法一起在IList<T>上创建扩展方法,您需要{ {1}}在调用ToList之前的选择,除非您将其移到扩展程序中。

Random

答案 2 :(得分:0)

这种随机播放方法比其他答案更好。链接时仍然不会有任何性能问题,而且仍然是LINQ。

BadCredentialsException: Bad credentials

用法:

public static IEnumerable<T> TakeRandom<T>(this IEnumerable<T> source, int count)
{
    return source.Shuffle().Take(count);
}

public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> source)
{
    return source.OrderBy(x => Guid.NewGuid());
}