consulta aleatória com linq to sql
29/04/2015
0
public void testeGerarProva(string nivel, int materia, int ano, TextBox texto, int quantidade)
{
dc = new ModeloDadosDataContext();
if (nivel == "Super Fácil")
{
var pesquisa = (from questões in dc.TbQuestoesFechadas
where questões.Materia == materia && questões.Ano == ano && questões.Nivel == 1
orderby Guid.NewGuid()
select questões).Take(1);
foreach (var itens in pesquisa)
{
texto.Text = texto.Text + Environment.NewLine + itens.Enunciado.ToUpper() + Environment.NewLine + itens.Alternativas + Environment.NewLine + itens.Assunto + Environment.NewLine;
}
}
}
Alan Martins
Posts
30/04/2015
Jothaz
public void testeGerarProva(string nivel, int materia, int ano, TextBox texto, int quantidade) { dc = new ModeloDadosDataContext(); if (nivel == "Super Fácil") { var pesquisa = (from questões in dc.TbQuestoesFechadas where questões.Materia == materia && questões.Ano == ano && questões.Nivel == 1 orderby Guid.NewGuid() select questões).Take(1); foreach (var itens in pesquisa) { texto.Text = texto.Text + Environment.NewLine + itens.Enunciado.ToUpper() + Environment.NewLine + itens.Alternativas + Environment.NewLine + itens.Assunto + Environment.NewLine; } } }
Você precisa ser mais assertivo sobre a questão "mas não esta dando certo"! Quanto mais claro o enunciado do post mais fácil ser torna ajudá-lo!
Retorna algum erro?
Ou não executa a consulta?
Você chegou a criar um breakpoint para debugar?
Uma coisa que notei no seu código foi que em partes você faz referência a nivel como string:
public void testeGerarProva(string nivel.... if (nivel == "Super Fácil").....
E na expressão linq como int:
where questões.Materia == materia && questões.Ano == ano && questões.Nivel == 1
Acho que ficaria melhor utilizar o parâmetro como int, passar 1 e usá-lo no if e na expressão linq.
Outro ponto você tem certeza que esta entrando no if:
if (nivel == "Super Fácil")
Lembre-se que C# é case sensitive, além do que espaços entre os termos podem gerar problema nas comparações.
E finalmente, não acho uma boa prática usar acentos nos nomes dos campos, classes e tabelas. É possível mas pode causar transtornos, então é melhor não usar.
30/04/2015
Alan Martins
a consulta é realizada com sucesso porém não ordena em ordem aleatória, sempre vem na mesma ordem.
o que eu quero é q o resultado da consulta seja ordenado aleatoriamente e não esta acontecendo!
30/04/2015
Marcos P
Qualquer gerenciador de banco de dados seleciona um índice, mesmo que ele não exista explicitamente, para ordenar os resultados do select.
Quando você diz que o resultado está sendo gerado sempre na mesma ordem, é exatamente a aplicação de um índice interno que você está percebendo na consulta.
Qual o gerenciador de banco você está usando ?
Qual a ordem que você desejaria obter ?
Por qual critério a ordem deveria ser "aleatória" ?
30/04/2015
Randrade
O código que usei como exemplo foi:
var pesquisa = (from questões in dc.TbQuestoesFechadas orderby Guid.NewGuid() select questões).Take(1);
Clique aqui para fazer login e interagir na Comunidade :)