2010-09-25 55 views
7

出于好奇,有可能使用NHibernate 3做这样的事情吗?是否有可能创建一个通用的Session.QueryOver <T>?

public IQueryable<T> FindAll<T>() 
{ 
    return Session.QueryOver<T>().List().AsQueryable(); 
} 

我得到一个编译错误说像...

的类型T必须是为了使用它作为一个参数T

,如果我能我想引用类型为Session.QueryOver创建一个扩展方法来处理泛型类型。

我可以取代这个使用类似

return Session.CreateCriteria(typeof (T)).List<T>().AsQueryable(); 

但热衷于使用查询API的功能。有任何想法吗?也许错过了一些显而易见

回答

10

您在T丢失的限制:

public IQueryable<T> FindAll<T>() where T : class 
{ 
    return Session.QueryOver<T>().List().AsQueryable(); 
} 

where T : class定义T必须是引用类型。 (由于编译错误要求,所以QueryOver<T>仅限于引用类型)。如果类型参数应用了约束,则任何使用此方法的泛型方法都必须应用类似的约束。请参阅msdn

+0

我知道我错过了一些明显的东西! – 2010-09-26 07:04:09

相关问题