Crie instância de classe genérica com base no tipo anônimo
-
07-07-2019 - |
Pergunta
Eu tenho uma aula ReportingComponent<T>
, que tem o construtor:
public ReportingComponent(IQueryable<T> query) {}
Eu tenho uma consulta Linq contra o banco de dados do Northwind,
var query = context.Order_Details.Select(a => new
{
a.OrderID,
a.Product.ProductName,
a.Order.OrderDate
});
Consulta é do tipo IQueryable<a'>
, onde um 'é um tipo anônimo.
Quero passar a consulta para o relatórios decomponente para criar uma nova instância.
Qual é a melhor maneira de fazer isso?
Atenciosamente.
Solução
Escreva um método genérico e use a inferência do tipo. Costumo achar que isso funciona bem se você criar uma classe não estática não estática com o mesmo nome que o genérico:
public static class ReportingComponent
{
public static ReportingComponent<T> CreateInstance<T> (IQueryable<T> query)
{
return new ReportingComponent<T>(query);
}
}
Então, em seu outro código, você pode ligar:
var report = ReportingComponent.CreateInstance(query);
Editar: a razão pela qual precisamos de um tipo não genérico é esse tipo de inferência apenas para métodos - ou seja, um método que introduz um novo parâmetro de tipo. Não podemos colocar isso no tipo genérico, pois ainda precisamos ser capazes de especificar o tipo genérico para chamar o método, que derrota o ponto inteiro :)
eu tenho um Postagem do blog que entra em mais detalhes.