簡體   English   中英

根據匿名類型創建通用類實例

[英]Create Generic Class instance based on Anonymous Type

我有一個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'是匿名類型。

我想將查詢傳遞給ReportingComponent以創建一個新實例。

做這個的最好方式是什么?

親切的問候。

編寫通用方法並使用類型推斷。 如果您創建一個與通用類同名的靜態非通用類,我通常會發現這種方法很好用:

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

然后,您可以在其他代碼中調用:

var report = ReportingComponent.CreateInstance(query);

編輯:我們需要非泛型類型的原因是類型推斷僅對泛型方法進行 -即引入新類型參數的方法。 我們不能將其放在泛型類型中,因為我們仍然必須能夠指定泛型類型才能調用該方法,這使整個觀點失去了:)

我有一篇博客文章 ,其中有更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM