Pergunta

Eu estou tentando obter o enésimo elemento de uma lista de tipos anônimos retornados por uma consulta LINQ onde n é um número aleatório de 0 a 100. brinquei com ele um tempo e agora eu não estou recebendo qualquer lugar. Meu código (com nomes alterados para proteger IP):

var query = from Table1 t1 in theContext.Table1 
   join Table2 t2 in theContext.Table2
    on ... 
    where ... 
   select new 
   {
       partNum = t1.part_number, 
       partSource = t2.part_source
   }

int num = new Random().Next(0, 100); 

// here's where the code I've tried fails 

Posso alguma forma fazer uma Take<T>(100).ToList<T>()[num] para obter um único tipo anônimo com partNum e partSource? Acabei resolvendo isso definindo explicitamente um tipo, mas parecia que eu estava faltando uma solução mais elegante aqui. Tudo o que eu quero fazer é retornar um Dictionary<string, string> para o chamador então eu prefiro não ter que definir um tipo de fora deste método.

Atualizar : ElementAt não funciona para isso. Eu tentei adicionar:

// get a random part from the parts list
int num = new Random().Next(0, query.Count() - 1 );
var nthElement = query.ElementAt(num);

E eu tenho uma exceção: The query operator 'ElementAt' is not supported.

Foi útil?

Solução

Você deve ser capaz de usar:

var item = query.Take(100).ToList()[num];

É claro, seria mais eficiente para fazer:

var item = query.Skip(num).First();

Outras dicas

Eu acredito que você só quer o href="http://msdn.microsoft.com/en-us/library/bb299233.aspx" rel="nofollow noreferrer"> ElementAt método de extensão

var nthElement = query.ElementAt(num);

Não há necessidade de mexer com consultas Take ou tal, e certamente não ToList.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top