Нужно выбрать случайную запись из результатов запроса
Поэтому мне нужно иметь возможность выбрать случайную запись из набора записей, которые возвращает мой запрос. У меня возникла проблема с выяснением, как это сделать, потому что я не уверен, в каком контейнере мне выдаются результаты. Я также использую 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)
}
Я был бы очень признателен за любую помощь. Я даже не уверен, что с Google на данный момент из-за нашего использования EntitySpaces и как это делает практически все обычные решения не работающими.
Спасибо.
ОБНОВИТЬ:
Итак, вот что я придумала до сих пор. Теперь проблема в том, что if
операторы оцениваются как ложные, когда я знаю, что в коллекции должны быть значения, соответствующие им.
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 ответ
Обновить
Я не мог полностью понять, чего вы пытаетесь достичь в своем обновленном коде, однако вот мое лучшее предположение о том, как это должно быть написано, попробуйте:
Random r = new Random();
int winner = r.Next(0, erc.Count()-1);
EmployeeRecognition er = erc[winner];
От имени EmployeeRecognitionCollection
Похоже, что это коллекция. Если есть возможность отладки, то, что вам нужно выяснить с помощью quickwatch, это то, поддерживает ли он индексаторы. то есть нормально ли делать erc[i]. Если это так, то использовать Random на индексаторе довольно просто.
Если он не поддерживает индексатор, вы можете узнать, дает ли он свойство Count. Таким образом, вы можете получить перечислитель, увеличивая его i раз, где i - случайное число от 0 до Count-1. Для продвижения нужно позвонить
erc.GetEnumerator().MoveNext()