Usuário com melhor resposta
Seleção de campos

Pergunta
-
Tenho uma camada de acesso a dados que utiliza Entity Framework.
Gostaria que os métodos de busca de registros fossem mais flexiveis, onde eu pudesse
passar por parametro os campos que eu gostaria que fossem retornados em uma consulta:
public virtual IList<TEntity> Listar(Func<TEntity, TEntity> selector = null)
{
IQueryable<TEntity> query = _context.Set<TEntity>();
if (selector != null)
query.Select(selector);
return query.ToList();
}
o problema que quando chamo o método não conseguido passar os campos que eu quero
productRepository.Listar(x => new { x.ProductID, x.ProductName });
//um erro é acusado: Cannot implicitly converte type 'AnonymousType#1' to 'Models.Product'
como devo criar o parâmetro para o método?
Respostas
-
Uma solução próxima disso é vc retornar um IQueryable, ao invés de um IList.
Vc pode aplicar vários critérios de consulta em um objeto IQueryable, o que ajudaria a construir métodos que podem ser reutilizados em várias situações.
- Marcado como Resposta Andrey Mariano domingo, 25 de janeiro de 2015 22:35
- Não Marcado como Resposta Andrey Mariano domingo, 25 de janeiro de 2015 22:35
- Marcado como Resposta Andrey Mariano domingo, 25 de janeiro de 2015 22:35
Todas as Respostas
-
Uma solução próxima disso é vc retornar um IQueryable, ao invés de um IList.
Vc pode aplicar vários critérios de consulta em um objeto IQueryable, o que ajudaria a construir métodos que podem ser reutilizados em várias situações.
- Marcado como Resposta Andrey Mariano domingo, 25 de janeiro de 2015 22:35
- Não Marcado como Resposta Andrey Mariano domingo, 25 de janeiro de 2015 22:35
- Marcado como Resposta Andrey Mariano domingo, 25 de janeiro de 2015 22:35
-
Andrei,
Apenas complementando, no link abaixo há um exemplo do que comentei:
http://forums.asp.net/t/2013385.aspx?search+query+with+optional+fields+in+entity+framework+
-
Acredito que a melhor opção é passaram por parâmetro.
...
.Query
.Select(...)
...string[] fruits = { "apple", "banana", "mango", "orange", "passionfruit", "grape" }; var query = fruits.Select((fruit, index) => new { index, str = fruit.Substring(0, index) }); foreach (var obj in query) { Console.WriteLine("{0}", obj); } /* This code produces the following output: {index=0, str=} {index=1, str=b} {index=2, str=ma} {index=3, str=ora} {index=4, str=pass} {index=5, str=grape} */
Abraços