Создание экземпляра Generic Class на основе анонимного типа

У меня есть класс ReportingComponent<T>, у которого есть конструктор:

public ReportingComponent(IQueryable<T> query) {}

У меня есть запрос Linq против базы данных Northwind,

var query = context.Order_Details.Select(a => new 
{ 
    a.OrderID, 
    a.Product.ProductName,
    a.Order.OrderDate
});

Запрос имеет тип IQueryable<a'>, где a 'является анонимным типом.

Я хочу передать запрос ReportingComponent для создания нового экземпляра.

Каков наилучший способ сделать это?

С уважением.

Ответ 1

Напишите общий метод и введите тип вывода. Я часто считаю, что это хорошо работает, если вы создаете статический неродственный класс с тем же именем, что и общий:

public static class ReportingComponent
{
  public static ReportingComponent<T> CreateInstance<T> (IQueryable<T> query)
  {
    return new ReportingComponent<T>(query);
  }
}

Затем в другом коде вы можете позвонить:

var report = ReportingComponent.CreateInstance(query);

EDIT: Причина, по которой нам нужен не-общий тип, заключается в том, что вывод типа встречается только для общих методов, то есть метода, который вводит новый параметр типа. Мы не можем поместить это в общий тип, поскольку нам все равно придется указывать общий тип, чтобы вызвать метод, который побеждает всю точку:)

У меня есть сообщение в блоге, которое более подробно описано.