2011-07-05 67 views
1

我有一個類X,Y和Z和需要一種方法來有一個方法返回X,Y或Z,類似的IEnumerable:使用泛型產生IEnumerable的泛型類型

public IEnumerable<T> BuildList<T>(String sql) 
{ 
    return Query<T>(sql); 
} 

如果查詢是一個自定義的方法做SQL查詢和結果映射到T.

的IEnumerable的

我想使用它,如:

var x_items = BuildList<X>("select * from table_x"); 
var y_items = BuildList<Y>("select * from table_y"); 
var z_items = BuildList<Z>("select * from table_z"); 

是問題的查詢的方法或我我只是在做泛型錯誤?

+3

那麼這*看*好的 - 你有什麼錯誤?這真的提供了通過調用'Query'的好處嗎?你還沒有真正提供足夠的信息來幫助你... –

+0

信息很薄,我知道 - 抱歉。我無法直接調用Query-direct cuz它位於數據訪問層。我得到的錯誤:'T'必須是一個具有公共無參數構造函數的非抽象類型,以便將其用作泛型類型或方法Data.SQL.SqlDataAccessLayerBase.Query中的參數'TStorage'。查詢(string,params Data.SQL.SqlParameter [])'和錯誤#2「類型'T'必須是引用類型才能用作通用類型或方法Data.SQL.SqlDataAccessLayerBase.Query中的參數'TStorage'Query (字符串,參數Data.SQL.SqlParameter [])'「。這有幫助嗎? – Weholt

回答

4

給你的評論已經給編譯器錯誤存在,這聽起來像你只需要在T類型約束:

public IEnumerable<T> BuildList<T>(String sql) where T : class, new() 
{ 
    return Query<T>(sql); 
} 
+0

它的工作!非常感謝!這真的讓我的一天:-) – Weholt

1

類型T的應該是的DbContext

+0

「存在」是什麼意思?無論如何,這可能不是問題。 –

+0

我認爲這個問題很模糊,但在EF中,當我們查詢時,應該知道T的類型,是否是? – DeveloperX

+0

*類型*已知,它可以是'X','Y'或'Z'。 –