是否可以创建一个通用的Session.QueryOver ?

出于好奇,可以使用NHibernate 3做这样的事情吗?

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

我得到一个编译错误,说像……

类型T必须是引用类型才能将其用作参数T.

我想知道我是否可以创建一个Session.QueryOver的扩展方法来处理generics类型。

我可以用类似的东西替换它

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

但是热衷于使用查询api的function。 有任何想法吗? 也许缺少明显的东西!

你错过了对T的限制:

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

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

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