Как случайным образом установить значение свойства - PullRequest
0 голосов
/ 01 апреля 2020

В ASP. NET Ядро, мне нужно установить свойство в случайную строку, но случайная строка будет сгенерирована из другого свойства. Свойства:

public class State
{
    public int Id {get;set;}
    public string Name {get;set;}
    public string Capital {get;set;}
    public string RandomCapital {get;set;}
}

В основном Capital имеет значения столиц значений в качестве своих значений, и мне нужно установить RandomCapital для случайных экземпляров Capital или случайных значений, я пытаюсь сделать это, используя LINQ. В моем контроллере все, что у меня есть, это способ генерировать случайные значения, но не устанавливать свойства в случайные значения. Я знаю, что если я помещу это в контроллер, он сгенерирует x случайных значений, но как мне установить 3 случайных значения, чтобы создать тест с множественным выбором?

public async Task<IActionResult> SetValues()
{
    Random random = new Random();
    var quiz = _context.States.OrderBy(c => random.Next()).Take(x);
    return View(quiz);
}

Ответы [ 2 ]

2 голосов
/ 01 апреля 2020
var rand = new Random();
var idx = rand.Next(0, _context.States.Count); // get the random index of the item in the list
var randState = _context.States.ToArray()[idx]; // get random item

// if the capital is the capital of the random state
var capital = randState.Capital;
1 голос
/ 02 апреля 2020

Если у вас есть тест, вы должны хотеть несколько столиц. Итак, это будет сделано

var rand = new Random();
var idx = rand.Next(0, _context.States.Count); 
var allStates = _context.States.ToArray(); 
var randState = allStates[idx]; // get random state

// now, you need 3 more states to fill random capital slots
var allButRandomStates = allStates.Where(s => s.Name != randState.Name).ToList();

// Get 3 additional random capitals via their states
var stateList = new List<State>(); 
while (stateList.Count < 3)
{
    idx = rand.Next(0, allButRandomStates.Count); 
    var st = allButRandomStates[idx]; // get random state
    allButRandomStates.Remove(st);  // remove from where you get it
    stateList.Add(st); // add to where you want it
}
// get capitals of your states
string[] randomCapitals = stateList.Select(s => s.Capital).ToArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...