我有一个类ReportingComponent<T>,它有一个构造函数:
public ReportingComponent(IQueryable<T> query) {}我对Northwind数据库进行了Linq查询,
var query = context.Order_Details.Select(a => new
{
a.OrderID,
a.Product.ProductName,
a.Order.OrderDate
});查询的类型为IQueryable<a'>,其中a‘是匿名类型。
我想将query传递给ReportingComponent以创建一个新实例。
做这件事最好的方法是什么?
致以亲切的问候。
发布于 2008-11-11 07:27:22
编写泛型方法并使用类型推断。我经常发现,如果您创建一个与泛型类同名的静态非泛型类,这种方法效果很好:
public static class ReportingComponent
{
public static ReportingComponent<T> CreateInstance<T> (IQueryable<T> query)
{
return new ReportingComponent<T>(query);
}
}然后在你的其他代码中,你可以调用:
var report = ReportingComponent.CreateInstance(query);编辑:我们需要非泛型类型的原因是,类型推断只发生在泛型方法中--即引入新类型参数的方法。我们不能把它放在泛型类型中,因为我们仍然必须能够指定泛型类型才能调用方法,这就失去了全部意义:)
我有一个更详细的blog post。
https://stackoverflow.com/questions/280172
复制相似问题