IQueryable to List
estou a usarSystem.Linq.Dynamic para permitir que eu selecione dinamicamente uma lista de campos de uma consulta como esta:
finalQuery = query.Select(string.Format("new({0})", string.Join(",", selectors)));
Ondeselectors
é apenas umList<string>
com todos os campos que eu quero. Isso funciona muito bem, mas esta versão do método de extensãoSelect
retorna umIQueryable
. Não é issonão IQueryable<T>
. Se eu tiver umIQueryable<T>
Eu posso simplesmente fazer uma.ToList()
para convertê-lo em uma lista e forçar a consulta a ser realmente executada no banco de dados, mas com o não genéricoIQueryable
, esse método não existe.
Isto é porqueToList
é herdado deIEnumerable<T>
qualIQueryable<T>
herda eIQueryable
, obviamente, não.
Então, qual é a maneira mais eficiente de obter umaIQueryable
executar a consulta e me devolver uma lista? Eu posso fazer isso:
List<object> rtn = new List<object>();
foreach (var o in finalQuery)
{
rtn.Add(o);
}
Mas parece que deve ser uma maneira mais fácil.
Editar: em resposta a sugestões, tentei os dois:
finalQuery.Cast<object>().ToList();
e:
finalQuery.Cast<dynamic>().ToList();
Que ambos dãoNotSupportedExceptions
com a mensagem:
Unable to cast the type 'DynamicClass1' to type 'System.Object'. LINQ to Entities
only supports casting EDM primitive or enumeration types.