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