出于好奇,可以使用NHibernate 3做这样的事情吗?
public IQueryable<T> FindAll<T>()
{
return Session.QueryOver<T>().List().AsQueryable();
}
我收到编译错误,说的是......
Type T必须是引用类型才能将其用作参数T。
我想知道是否可以为Session.QueryOver创建一个扩展方法来处理泛型类型。
我可以用
之类的东西替换它return Session.CreateCriteria(typeof (T)).List<T>().AsQueryable();
但是热衷于使用查询api的功能。有任何想法吗?也许错过了一些明显的东西!!
答案 0 :(得分:11)
您错过了T
的限制:
public IQueryable<T> FindAll<T>() where T : class
{
return Session.QueryOver<T>().List().AsQueryable();
}
where T : class
定义T
必须是引用类型。 (由于需要编译错误,因此QueryOver<T>
仅限于引用类型)。如果类型参数应用了约束,则使用此方法及其自身的泛型参数的任何泛型方法都必须应用类似的约束。
有关泛型类型参数约束的完整概述,请参阅msdn。