1
使用Visual Studio的O/R設計器,我創建了許多從基類繼承的類(名爲SCO
)。使用泛型與LINQ繼承
繼承的類型有一個鑑別符屬性TypeId
這是一個包含類型名稱的字符串。例如,繼承的類Blog
將具有Blog
的TypeId
屬性。
我希望能夠創建一個返回任何特定繼承類型的強類型集合的方法。我的這個方法嘗試如下:
public static IQueryable<T> GetSCOs<T>(SCODataContext dc) where T : SCO
{
string targetType = typeof(T).Name;
IQueryable<T> scos = from s in dc.SCOs
where s.TypeId == targetType
select s;
return scos;
}
當我試圖編譯這個方法,我得到以下錯誤...
_Cannot implicitly convert type 'System.Linq.IQueryable<SCOs.SCO>' to 'System.Linq.IQueryable<T>'. An explicit conversion exists (are you missing a cast?)_
我(覺得)我明白這是爲什麼發生,但一直無法找到解決方案。任何建議,指導將非常感激。
如果問題解決了,請將答案標記爲已接受,這樣可以防止其他用戶添加更多可能錯誤的答案,並且還可以幫助其他用戶查找答案而不是詢問自己的問題。 – 2010-12-22 09:47:34
使用泛型時人們會忘記的事情是,它們需要在編譯時知道,否則編譯器不能保證類型安全(這是使用泛型的全部要點)。另一方面,LINQ查詢運行JIT,因此您使用的方法會爲編譯器帶來一些問題,因此在您的錯誤消息中會出現`IQueryable`。 –
2010-12-22 11:25:30