所以我需要能够从我的查询返回的一组记录中选择一个随机记录。我有一个问题,想知道如何做到这一点,因为我不确定结果给我的容器。我还使用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];
有什么想法吗?
答案 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()