如何从可用数字中获取随机数?

时间:2017-11-18 00:19:25

标签: c# entity-framework

我有一张桌子,我试图从中获取一个随机数:

//Fruits
id  |  FruitName
----------------
2   |  Banana
3   |  Apple
4   |  Orange
6   |  Grape
7   |  Plum
8   |  Lime
10  |  Kiwi

问题是由于不一致(注意: ids 1,5和9缺失),编写以下语句将不起作用(即使写得正确):

Random.Next(someLinq.id).First(), (samelinq.id).Last())

如何从可用数字中获取随机数?

4 个答案:

答案 0 :(得分:7)

您可以简单地使用项目的计数作为最大随机数,然后按索引选择随机项目:

var random = new Random();
var items = new List<int> {2, 3, 4, 6, 7, 8, 10};
var randomItem = items[random.Next(items.Count)];

或者,在您的情况下(假设您获得的Fruit项目列表包含Id属性):

var items = new List<Fruit>
{
    new Fruit {Id = 2, Name = "Banana"},
    new Fruit {Id = 3, Name = "Apple"},
    new Fruit {Id = 4, Name = "Orange"},
    new Fruit {Id = 6, Name = "Grape"},
    new Fruit {Id = 7, Name = "Plum"},
    new Fruit {Id = 8, Name = "Lime"},
    new Fruit {Id = 10, Name = "Kiwi"}
};

var random = new Random();
var randomItem = items[random.Next(items.Count)];

Console.WriteLine("Randomly chose fruit: Id = {0}, Name = {1}", 
    randomItem.Id, randomItem.Name);

答案 1 :(得分:4)

你可以在数组的长度随机创建随机数后添加数组中的所有数字,你可以使用这个数字作为数组中的数字索引

int[] array = new int[]{2,3,4,6,7,8,10};
Random rnd = new Random();
int randomIndex = rnd.Next(0,array.length);
var x = array[randomIndex];

你可以用 x 变量

做你想做的事

答案 2 :(得分:2)

这样的事情怎么样?

// get the count
var count = context.Fruits.Count();
// generate a random fruit index
var random = new Random().Next(count);
// skip by random
var randomFruit = context.Fruits
                         .Skip(random)
                         .Take(1)
                         .FirstOrDefault();

答案 3 :(得分:1)

对于统计和加密绝对不正确的随机值,您可以使用

var randomId = resultOfDbLinqQuery
    .OrderBy(e => Guid.NewGuid())
    .First()
    .Select(item = item.id);