我有一张桌子,我试图从中获取一个随机数:
//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())
如何从可用数字中获取随机数?
答案 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);