C# 查询结果Linq的随机选择
我有一个查询,结果是10行、20行或任意数量的行。下面是查询C# 查询结果Linq的随机选择,c#,linq,random,C#,Linq,Random,我有一个查询,结果是10行、20行或任意数量的行。下面是查询 var q = (from c in session.DB.Question where c.Level='1' && c.Group='1' select c); 此查询可以提供任意数量的行 但是我只需要显示结果中的一行。我可以先选择top 1/但我想随机选择 我看到了一个关于这个的话题: 但我想把它放在林肯 请帮助我如何从结果中获取随机行。我假设您的问题具有Id。请参见下面的示例。我使用Random类生成随
var q = (from c in session.DB.Question where c.Level='1' && c.Group='1' select c);
此查询可以提供任意数量的行
但是我只需要显示结果中的一行。我可以先选择top 1/但我想随机选择
我看到了一个关于这个的话题:
但我想把它放在林肯
请帮助我如何从结果中获取随机行。我假设您的问题具有Id。请参见下面的示例。我使用Random类生成随机数
List<Question> questions = new List<Question>
{
new Question { Id = 10, Name = "What?" },
new Question { Id = 12, Name = "How?" },
new Question { Id = 32, Name = "When?" },
new Question { Id = 41, Name = "Where?" },
};
var q = (from c in questions select c);
int i = 1;
Dictionary<int, int> questionKeys = new Dictionary<int, int>();
foreach (var item in questions)
{
questionKeys.Add(i, item.Id);
i++;
}
Random rdm = new Random();
int randomRow = rdm.Next(1, q.Count());
var questionId = questionKeys.Where(x => x.Key == randomRow).Select(x => x.Value).Single();
var result = q.Where(x => x.Id == questionId).Single();
Console.WriteLine(result.Name);
List questions=新列表
{
新问题{Id=10,Name=“What?”},
新问题{Id=12,Name=“How?”},
新问题{Id=32,Name=“何时?”},
新问题{Id=41,Name=“Where?”},
};
var q=(从问题c中选择c);
int i=1;
Dictionary questionKeys=新字典();
foreach(问题中的var项目)
{
添加(i,item.Id);
i++;
}
随机rdm=新随机();
int randomRow=rdm.Next(1,q.Count());
var questionId=questionKeys.Where(x=>x.Key==randomRow).Select(x=>x.Value.Single();
var result=q.Where(x=>x.Id==questionId).Single();
Console.WriteLine(result.Name);
按值对项目排序,然后选择第一个:
var q = (from c in session.DB.Question
where c.Level =='1' && c.Group =='1'
select c)
.OrderBy(o => SqlFunctions.Rand())
.First();
假设
data
是您的数据行:
Random rand = new Random();
var row = data.ElementAt(rand.Next(data.Count));
请注意,这不适用于Linq to SQL,因此应在查询数据库后使用。谢谢大家。我找到了它并开始工作:
var q = (from c in Session.DB.WinQuestionSet
where c.Level == "easy" && c.Grade == "1"
select c).OrderBy(x => Guid.NewGuid()).Take(1).Single();
label1.Text = q.Text;
从技术上讲,
First()
不进行排序会得到一个“随机”行;)您的调查问卷中是否有任何标识码?tnx,但可能数字没有顺序,因此int randomRow=rdm.Next(1,q.Count());结果中可能不包含ID。如果ID不是从1到计数的序列,则返回yes,将集合或非序列ID精确地放入字典,并以序列形式填充键,然后使用您可以看到的随机数。作者需要LinqToSQL解决方案。所以,使用字典可能是一个坏的,当你突然得到1MLN行而不是10-20LIQQOTQL不支持<代码>元素> /Cord>我没有考虑到,很好的捕捉。我将更新我的答案。谢谢,sqlFunction.Rand()的名称空间是什么?如果您添加了引用,那么System.Data.Objects.SqlClient
@阿列克谢。嗯,这是我在回答中发布的同一个链接。我添加了“使用system.data.sqlcliet”,但仍然是sqlFunctions.Rand()未知。@Backs“名称'sqlFunctions'在当前上下文中不存在”