从表中获取随机项目,无需重复

时间:2016-07-06 17:08:22

标签: c# asp.net-mvc

我正在创建一个应用程序,我必须从列表中显示一个问题而不重复。

public IEnumerable<dynamic> GetQue()
{
    var result = obj.tblQuestions
        .OrderBy(r => Guid.NewGuid())
        .Select(o => new { o.id, o.Question, o.Opt1, o.Opt2, o.Opt3, o.Opt4 })
        .Take(1);
    return result;
}

目前我正在接受一个随机的问题,但重复一遍。如何在不重复的情况下获得记录?

3 个答案:

答案 0 :(得分:0)

正如我在评论中所说,你可以使用随机的方法逐个获取元素,然后从列表中删除所选元素。重复此操作,直到列表为空。

我并不是在为你的案件准确提供所需的代码,你仍然需要让它适应你的课程,但这是它应该尊重的原则:

var list = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int randomId;
Random rand = new Random();
if (list.Count != 0)
{

        randomId = rand.Next(list.Count);
        var randomElement = list[randomId];
        list.RemoveAt(randomId);
        return randomElement;
}

这从整数列表中获取随机元素,考虑到你的列表是数据是一个类,而不是你应该更新的那个。当然。

答案 1 :(得分:-1)

java.lang.IndexOutOfBoundsException: Inconsistency detected

答案 2 :(得分:-2)

来源:how to avoid number repeation by using random class in c#?

如果您在循环时将项目添加到列表中,则可以检查列表以查看是否已添加项目。我是新手,所以我真的不能为你编码,但这个想法就在那里。为已经循环的条目创建一个单独的列表,然后执行if语句以检查下一个条目是否在执行它之前是否在列表中。

我会在评论中做到这一点,但我没有50个代表,所以我无法启动评论链。 :/