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.

Foi útil?

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.

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