é possível usar Leve em LINQ quando a consulta retorna um tipo anônimo?
-
06-07-2019 - |
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.
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"> Não há necessidade de mexer com consultas ElementAt
método de extensão var nthElement = query.ElementAt(num);
Take
ou tal, e certamente não ToList
.