/// <summary> /// /// Obter uma quantidade N de participantes da trilha, aleatoriamente. /// </summary> /// <param name="usuarioTrilhaIdLogado">ID do usuário logado, que não deverá visualizar seu PIN na tela.</param> /// <param name="qntMax">Quantidade máxima de participantes.</param> /// <returns></returns> public virtual List <int> ObterParticipantes(int usuarioTrilhaIdLogado, int?qntMax = 50) { // Obter somente os ids das matrículas que possuam participações nesse nível. var ids = ListaUsuarioTrilha .Select(x => new { x.ID, x.NovasTrilhas, x.StatusMatricula }) .Where(x => x.NovasTrilhas == true && x.StatusMatricula == enumStatusMatricula.Inscrito && x.ID != usuarioTrilhaIdLogado) .Select(x => x.ID) .ToList(); var selecionados = new List <int>(); var randi = new Random(); // Loopar pelos ids e ir removendo aleatoriamente de acordo com a quantidade de ids restantes. // O loop só acontece enquanto houverem ids ou alcançar o limite máximo (qntMax) for (var i = 1; i <= qntMax && ids.Any(); i++) { var valor = ids[randi.Next(ids.Count())]; selecionados.Add(valor); // Remover o id selecionado a cada loop para não repetir. ids.Remove(valor); } return(selecionados); }
/// <summary> /// Verifica se o usuário possui matrícula num nível de trilha. /// </summary> /// <param name="usuarioId">ID do usuário</param> /// <returns></returns> public virtual bool UsuarioPossuiMatricula(int usuarioId) { return(ListaUsuarioTrilha.Any(ut => ut.Usuario.ID == usuarioId && ut.NovasTrilhas == true && ut.StatusMatricula != enumStatusMatricula.CanceladoAluno)); }