是否可以创建一个通用的Session.QueryOver <t>?</t>

时间:2010-09-25 22:00:57

标签: c# nhibernate

出于好奇,可以使用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的功能。有任何想法吗?也许错过了一些明显的东西!!

1 个答案:

答案 0 :(得分:11)

您错过了T的限制:

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

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

有关泛型类型参数约束的完整概述,请参阅msdn