需要从查询结果中选择一个随机记录

时间:2015-02-11 23:15:43

标签: c# sql random entityspaces

所以我需要能够从我的查询返回的一组记录中选择一个随机记录。我有一个问题,想知道如何做到这一点,因为我不确定结果给我的容器。我还使用EntitySpaces进行数据库持久化,因此大多数数据库交互性来自那里。

我已经粘贴了下面应该执行此操作的方法,使用了伪代码,我遇到了问题。

    protected void btnChoose_Click(object sender, EventArgs e)
{

    DateTime? dateFrom = null;
    DateTime? dateTo = null;

    if (!string.IsNullOrWhiteSpace(dtDateTo.Text))
    {
        dateFrom = dtDateFrom.Text.ToDateTime().Value;
    }
    if (!string.IsNullOrWhiteSpace(dtDateTo.Text))
    {
        dateTo = dtDateTo.Text.ToDateTime().Value.EndOfDay();
    }

    EmployeeRecognitionCollection erc = EmployeeRecognitionCollection.GetAllCards(dateFrom, dateTo, null, null);

    --> I need to figure out what 'erc' actually is so I can figure out how to use Random() appropriately 

    --> I've already verified that erc ends up containing the records that match the criteria in the query (in this case it's just a date range)

}

我非常感谢任何帮助。由于我们使用了EntitySpaces,以及这似乎使得几乎所有正常解决方案无法正常工作,我甚至不确定谷歌目前在做什么。

谢谢。

更新:

所以这就是我到目前为止所提出的。现在的问题是if语句在我知道应该有与集合中的这些值相对应的值时评估为false。

    EmployeeRecognitionCollection erc = EmployeeRecognitionCollection.GetAllCards(dateFrom, dateTo, null, null);

    int minRecords = 0;
    int maxRecords = 0;

    if (erc[0].ToInteger().HasValue)
    {
        minRecords = erc[0].ToInteger().Value;
    }
    if (erc[erc.Count() - 1].ToInteger().HasValue)
    {
        maxRecords = erc[erc.Count() -1].ToInteger().Value;
    }

    Random r = new Random();
    int winner = r.Next(minRecords, maxRecords);

    EmployeeRecognition er = erc[winner];

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

更新

我无法完全理解您在更新的代码中尝试实现的目标,但是,我最好猜测应该如何编写,尝试一下:

Random r = new Random();
int winner = r.Next(0, erc.Count()-1);
EmployeeRecognition er = erc[winner];

从名称EmployeeRecognitionCollection开始,它似乎是一个集合。如果可以调试,那么使用quickwatch需要找到的是它是否支持索引器。也就是做erc [i]。如果是,那么在索引器上使用Random非常简单。

如果它不支持索引器,您可能想知道它是否给出了Count属性。这样你就可以获得枚举器,将它推进多次,其中i是0到Count-1之间的随机数。提前你需要打电话

erc.GetEnumerator().MoveNext()