基于匿名类型创建通用类实例

我有一个ReportingComponent类,它有构造函数:

 public ReportingComponent(IQueryable query) {} 

我有针对Northwind数据库的Linq查询,

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

查询的类型为IQueryable ,其中’是匿名类型。

我想将查询传递给ReportingComponent以创建新实例。

做这个的最好方式是什么?

亲切的问候。

编写generics方法并使用类型推断。 我经常发现,如果您创建一个与通用名称相同的静态非generics类,则此方法很有效:

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

然后在您的其他代码中,您可以调用:

 var report = ReportingComponent.CreateInstance(query); 

编辑:我们需要非generics类型的原因是类型推断只发生在generics方法中 – 即引入新类型参数的方法。 我们不能把它放在generics类型中,因为我们仍然必须能够指定generics类型才能调用方法,这会使整个点失败:)

我有一篇博文 ,详细介绍。