基于匿名类型创建通用类实例
我有一个ReportingComponent
类,它有构造函数:
public ReportingComponent(IQueryable query) {}
我有针对Northwind数据库的Linq查询,
var query = context.Order_Details.Select(a => new { a.OrderID, a.Product.ProductName, a.Order.OrderDate });
我想将查询传递给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类型才能调用方法,这会使整个点失败:)
我有一篇博文 ,详细介绍。