Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查询结果Linq的随机选择_C#_Linq_Random - Fatal编程技术网

C# 查询结果Linq的随机选择

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类生成随

我有一个查询,结果是10行、20行或任意数量的行。下面是查询

   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'在当前上下文中不存在”