Напишите универсальный метод и используйте вывод типа. Я часто нахожу, что это хорошо работает, если вы создаете статический неуниверсальный класс с тем же именем, что и у общего:
public static class ReportingComponent
{
public static ReportingComponent<T> CreateInstance<T> (IQueryable<T> query)
{
return new ReportingComponent<T>(query);
}
}
Тогда в другом своем коде вы можете позвонить:
var report = ReportingComponent.CreateInstance(query);
РЕДАКТИРОВАТЬ: причина, по которой нам нужен неуниверсальный тип, заключается в том, что вывод типа происходит только для универсальных методов - т.е. метода, который вводит новый параметр типа. Мы не можем поместить это в универсальный тип, так как нам все еще нужно было бы указать универсальный тип для вызова метода, который побеждает весь смысл:)
У меня есть запись в блоге , в которой более подробно.